php数据库链式查询,8.1 php链式数据库查询过程

php链式数据库查询过程

使用了魔术变量 __callStatic特性 当对找不到对应方法时便会执行方法,在__callStatic()方法内在使用call_user_func_array()回调 调用找对应的方法来执行。

小案例插曲 :平时写PDO后会使用var_dump()快速测试是否链接成功,若返回 object(PDO)#1 (0) 会认为已经链接成功!但并非如此 就算返回这个也不代表成功。。。当时就是默写少了一个关键词 但测试链接成功 所以分段 分块调试很重要得冷静思考为啥查询语句正确不返回数据应该就是 链接问题。

self::$pdo=new \PDO('mysql:127.0.0.1;dbname=php','root','root'); //错误语句 少关键词

下来看下数据库链式查询小案例图

2969cab76ee93fa1e8a5d85444a94628.png

Query.php

实例

实例

namespace _chaxun;

class Query2

{

//链接对象

public $pdo=null;

//数据表

public $table;

//返回字段

public $field='*';

//查询条件

public $where;

//数据排序

public $order;

//显示数量

public $limit;

//构造方法,链接数据库

public function __construct($pdo)

{

$this->pdo=$pdo;

}

//设置表名

public function table($tableName)

{

$this->table=$tableName;

return $this;//关键性动作 返回一个当前类的实例(返回自己)

}

//返回字段

public function field($fields='*')

{

$this->field=empty($fields) ? '*':$fields;

return $this;

}

//数据排序

public function order($order='')

{

$this->order=empty($prder) ? ' ORDER BY '.$order:'';

return $this;

}

//查询条件

public function where($where='')

{

$this->where=empty($where) ? $where : ' WHERE '.$where;

return $this;

}

//显示数量

public function limit($limit)

{

//支持偏移量与查询条数[5,6] 也可以单独限制条数

is_array($limit)? $limit="{$limit[0]},{$limit[1]}" :$limit;

$this->limit = empty($limit) ? $limit : ' LIMIT ' . $limit;

return $this;

}

//拼装SQL语句

public function select()

{

//拼接

$sql='SELECT '

.$this->field //返回字段

.' FROM '

.$this->table //数据表

.$this->where //查询条件

.$this->order //排序

.$this->limit; //查询字段

//预处理查询

$stmt = $this->pdo->prepare($sql);

$stmt->execute();

//        die($stmt->debugDumpParams()); //错误调试 查看sql语句

return $stmt->fetchAll(\PDO::FETCH_ASSOC);

}

}

运行实例 »

点击 "运行实例" 按钮查看在线实例

index.php

实例

namespace _0801;

require 'Query.php';

use _chaxun\Query2;

class Db

{

//数据库的链接对象

protected static $pdo=null;

//链接方法

public static function connection()

{

self::$pdo=new \PDO('mysql:host=127.0.0.1;dbname=php','root','root');

}

public static function __callStatic($name,$arguments)

{

//链接数据库

self::connection();

//实例化一个查询类,

$query=new Query2(self::$pdo);

//执行查询类中的方法

return call_user_func_array([$query,$name],$arguments);

}

}

$datas=Db::table('staff')//查询staff表

->field('age,name,mobile')//返回 age,name ,mobile字段的数据

->order('age desc')//以年龄降序排序

->limit([3,50])//查询50条数据 从第4条开始

->where('age>35 AND mobile LIKE "%13%"')//年龄大于35岁 并且手机号包含13数字

->select();

//var_dump($datas);

foreach ($datas as $data){

print_r($data);

echo '
';

}

运行实例 »

点击 "运行实例" 按钮查看在线实例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值