为了梦为了未来,每天都在付出;汗水,泪水,每天都在流淌。

模拟tp5查询链式操作

模拟TP5链式查询

数据库查询类Query

实例

<?php

//数据库查询类
class Query
{
    //保存sql语句中的各个组成部分
    // SELECT 字段列表 FROM 表名 WHERE 条件
    private $sql = [];

    //数据库的连接对象
    private $pdo =null;

    //构造方法
    public function __construct()
    {
        $this->pdo = new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
    }

    //table()获取sql中表名
    public function table($table)
    {
        $this->sql['table']=$table; //指定查询表名
        return $this;  //返回当前类实例对象,便于 链式调用该对象的其它方法->
    }

    //fields()获取sql中字段
    public function fields($fields)
    {
        $this->sql['fields']=$fields; //指定查询表名
        return $this;  //返回当前类实例对象,便于链式调用该对象的其它方法->
    }

    //where()获取sql中查询条件
    public function where($where)
    {
        $this->sql['where']=$where; //指定查询表名
        return $this;  //返回当前类实例对象,便于链式调用该对象的其它方法->
    }
   //执行查询,是一个终级方法
    public function select()
    {
        //拼装SELECT查询语句
        $sql = "SELECT {$this->sql['fields']} FROM {$this->sql['table']} WHERE {$this->sql['where']}";
        $stmt = $this->pdo->prepare($sql);//创建一个预处理对象
        $stmt->execute();//执行预处理对象
        return $stmt->fetchAll(PDO::FETCH_ASSOC);//解析获取常量
    }
}

数据库操作的入口类DB
实例

<?php
/**
 * 方法重载的实战案例: 模拟ThinkPHP5.1中的数据库链式操作
 * 用方法重载实现方法跨类调用
 */

//Db::table()->fields()->where()->select();
//加载Query类
require 'php2.php';

// 数据库操作的入口类
class Db
{
    public static function __callStatic($name, $arguments)
    {
        //call_user_func_array([类名, 方法],[])
        //call_user_func_array([对象, 方法],[])
        return call_user_func_array([(new Query()),$name],$arguments);
    }
}

$result = Db::table('news')
        ->fields('id,name,age,money')
        ->where('money > 2000')
        ->select();
//print_r($result);测试打印看看是否有数据

$table = '<table border="1" cellpadding=5px cellspacing=0 width=60% align=center>';
$table .= '<caption style="font-size: 1.5rem;margin:15px;">员工信息表</caption>';
$table .= '<tr bgcolor="#90ee90"><th>ID</th><th>姓名</th><th>年龄</th><th>工资</th></tr>';

foreach ($result as $staff) {
    $table .= '<tr align="center">';
    $table .= '<td>'.$staff['id'].'</td>';
    $table .= '<td>'.$staff['name'].'</td>';
    $table .= '<td>'.$staff['age'].'</td>';
    $table .= '<td>'.$staff['money'].'</td>';
    $table .= '</tr>';
}

$table .= '</table>';
$num = '<p style="text-align: center"> 共计:  <span style="color:red">'.count($result).'</span>   条记录</p>';
echo $table, $num;

请输入图片描述