在TP中自带操作多个库,但是要配置参数和建立模型,本人觉得实在是麻烦,干脆自己就封装一个方法在类里面调用。
因为项目需要,所以本人只编写了 添加和查询方法,有兴趣的朋友可以自行补充
#测试实例
public function test (){
#连接参数
$host = '127.0.0.1';//这里是你需要连接的库ip
$dbname = 'gdbox'; //数据库
$user = 'root'; //账号
$pass = 'vikily@8888'; //密码
#执行sql的语句
$data = array(
'operator' => 'select' ,
'table' => 'js_member' ,
'where' => array(
'true_name' => '正义的棒棒糖' ,
'city_id' => 5 ,
) ,
'order' => 'id asc' ,
'limit' => '0,1' ,
'alias' => 'a' ,
'join' => 'inner join js_member_card as b on a.id = b.user_id',
'field' => 'a.true_name,b.card_name'
);
#上data返回的sql如下
//select a.true_name,b.card_name from js_member as a inner join js_member_card as b on a.id = b.user_id where a.true_name = "正义的棒棒糖" and a.city_id = "5" order by a.id asc limit 0,1
$result = $this -> _db($host,$dbname,$user,$pass,$data);
}
/**
* @name PDO操作其他数据库
* @author cq <[email protected]>
* @copyright vikily 2018-6-27
* @param string $[operation]
* @param array $[data]
* @return mixed
*/
private function _db($host=null,$dbname=null,$user=null,$pass=null,$data = array()) {
#判断参数是否为空,returnApiError为私人封装函数,请勿直接使用,可用die('参数不能为空')代替
if(!$data && !$host && !$dbname && !$user && !$pass)returnApiError('参数不能为空');
#pdo连接数据库
$Db = new \PDO("mysql:host={$host};dbname={$dbname}","{$user}","{$pass}");
#有的可能无法展示中文,所以需要转换
$Db -> exec('set names utf8');
#验证逻辑
$operator = $data['operator'];
switch($operator){
#查询操作
case 'select':
#逻辑处理
#接收参数
#字段
$field = $data['field'];
#表名
$table = $data['table'];
#多表
$join = $data['join'] ;
#条件
$where = $data['where'];
#排序
$order = $data['order'];
#分页
$limit = $data['limit'];
#别名
$alias = $data['alias'];
#一维数组还是多维展示,默认一维,展示1条
if($data['type'] == 'all'){
$type = 2;
}else{
$type = 1;
}
#拼接sql语句
#默认sql
if($field){
$sql = "select ".$field." from {$table}";
}else{
$sql = "select * from {$table}";
}
#别名
if($alias)$sql .= ' as '.$alias;
#多表,因为可能存在left 或者 right ,而本人太懒所以不做补充了
if($join)$sql .= ' '. $join;
#条件
if($where){
#判断是否为数组
if(is_array($where)){
#带拼接
$str = '';
#数组个数
$count = count($where);
#最后建值判断是否需要拼接and
$num = $count - $num;
#数组拼接
$i = 1;#仿键值
foreach($where as $k=>$v){
#判断是否有别名
if($alias){
$str .= $alias.'.'.$k.' = "'.$v.'" ';
}else{
$str .= $k.' = "'.$v.'" ';
}
#判断键值确认是否拼接and
if($i < $num){
$str .= 'and ';
}
$i++;
}
#获取最后的sql
$sql .= ' where '.$str;
}else{
#字符串sql
$sql .= ' where '. $where;
}
}
#排序
if($order){
#判断是否有别名
if($alias){
$sql .= ' order by '. $alias.'.'.$order;
}else{
$sql .= ' order by '. $order;
}
}
#分页
if($limit)$sql .= ' limit '. $limit;
#执行SQL语句 1 = 返回一条 , 2 = 返回多条
if($type == 1){
$result = $Db -> query($sql) -> fetch(\PDO::FETCH_ASSOC);
return $result;
}else{
$result = $Db -> query($sql) -> fetchall(\PDO::FETCH_ASSOC);
return $result;
}
break;
#增加操作
case 'insert':
#逻辑处理
#接收参数
#表名
$table = $data['table'];
#要插入的数据
$add_data = $data['data'] ;
#拼接sql语句
$sql = '';
#判断是否是数组
if(is_array($add_data)){
#字段名的字符串
$str1 = "";
#字段值的字符串
$str2 = "";
foreach ($add_data as $k=>$v)
{
$str1 .= "{$k},";
$str2 .= "'{$v}',";
}
$str1 = rtrim($str1,",");
$str2 = rtrim($str2,",");
$sql = "insert into {$table} ({$str1})values({$str2})";
}else{
$sql .= $add_data;
}
#执行SQL语句
$result = $Db -> exec($sql);
return $result;
break;
#修改操作
case 'update':
#逻辑处理,待有需要时在开发
break;
#删除操作
case 'delete':
#逻辑处理,待有需要时在开发
break;
default:
returnApiError('错误类型');
}
}