Blogger Information
Blog 35
fans 0
comment 0
visits 25344
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
静态方法数据库查询的链式操作--2019年6月17日22:30分
白守的博客
Original
1078 people have browsed it

本篇文章主要知识点

1.方法重载和属性重载(重点)


案例内容

数据库查询的链式操作


zy01.php的内容

实例

<?php

// 注意,下面这些代码是自己敲的,但是注释是复制老师的.
require 'zy02.php';


class Db
{
    // 数据库连接对象,受保护的静态对象
    protected static $pdo = null;

    // 数据库连接方法,每次查询时再连接, 实现真正的惰性连接,节省系统开销
    public static function connection()
    {
        // 连接数据库,数据库的地址和账号密码
        self::$pdo = new PDO('mysql:host=localhost;dbname=php','root','root');
    }

    public static function __callstatic($name,$arguments)
    {
        // 创建一个pdo对象,并连接数据库
        self::connection();
        // 实例化查询类,将连接对象做为参数
        $query = new query(self::$pdo);
                // 执行查询类Query中的对象方法, 注意参数是数组,我只需要第一个参数:表名, 所以加了索引键名
        return call_user_func_array([$query,$name],[$arguments[0]]);

    }
}
// 客户端的链式调用
// 以Db类做入整数数据库操作的入口, SQL语句的各个部分用对象方法提供
// 链式操作是现代PHP框架的基础,非常有用

$staffs = Db::table('staff')
        ->field('staff_id,name,position,mobile')
        ->where('staff_id > 2') // = 2,只会输出一条
        ->limit(5)
        ->select();

foreach ($staffs as $staff) {
    print_r($staff); echo '<br>';
}

运行实例 »

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




zy02.php文件的内容

实例

<?php

// 数据库查询类

class Query
{
    // 连接对象
    public $pdo = null;

    // 数据表名
    public $table = '';

    // 字段列表
    public $field = '';

    // 查询条件
    public $where = '';

    // 显示数量
    public $limit = 0;

    // 构造方法,初始化连接对象
    public function __construct($pdo)

    {
        // 连接对象是对象方法的共享属性
        $this->pdo = $pdo;
    }
    // 调用表名
    public function table($tablName)
    {
        $this->table = $tablName;

        // 返回当前对象,便于链式调用该对象的其它方法
        return $this;
    }

    // 设置查询字段
    public function field($fields)
    {
        $this->field = $fields;
        return $this;
    }

    // 设置查询条件
    public function where($where)
    {
        $this->where = $where;
        return $this;
    }

    // 设置显示数量
    public function limit($limit)
    {
        $this->limit = $limit;
        return $this;
    }

    public function select()
    {
        // 查询条件分开设置, 可以确保链式方法独立
        // 然后判断是否为空
        $fields = empty($this->fields) ? '*' : $this->field;
        $where = empty($this->where) ? 'WHERE ': $this->where;
        $limit = empty($this->limit)? ' LIMIT ':$this->limit;
        
        // 拼接sql语句
        $sql = 'SELECT '.$fields. ' FROM '.$this->table.$where . $limit;
        // 预处理查询
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
        
    }
}

运行实例 »

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


Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments