Thinkphp 操作多个数据库

在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('错误类型');
}

}

猜你喜欢

转载自www.cnblogs.com/leaf-cq/p/9234318.html