《php面向对象》第36课:封装复杂的MVC-数据库操作-封装sql类-链式操作

数据库的大部分操作都是在sql类中实现的。

本节课我们主要学习什么是链式操作

链式操作主要体现在数据查询上,这里数据查询有两个方法:fetchAll()  和  fetch()

我们先看代码

<?php

namespace fastphp\db;
use fastphp\db\Db;

use \PDOStatement;


class Sql
{

    // 数据库表名
    protected  $table;

    private $where;

    private $order;

    // Pdo bindParam()绑定的参数集合
    private $param = array();

    //返回的字段
    private $fields = '*';

    function __construct($table)
    {
        $this->table = $table;
    }

    //查询后返回的字段
    public function fields($fields)
    {
        if (!empty($fields)) {
            $this->fields = $fields;
        }
        return $this;
    }

    /**
     * 查询条件
     */
    public function where($where = '')
    {
        if ($where) {
            $this->where = ' WHERE ' . $where;
        }

        return $this;
    }

    /**
     * 排序
     */
    public function order($order = '')
    {
        if ($order) {
            $this->order = ' ORDER BY ' . $order;
        }
        return $this;
    }

    // 查询所有
    public function fetchAll()
    {
        $sql = sprintf("select %s from `%s` %s %s", $this->fields, $this->table, $this->where,$this->order);
        $sth = Db::pdo()->prepare($sql);
        $sth->execute();

        return $sth->fetchAll();
    }

    // 查询一条
    public function fetch()
    {
        $sql = sprintf("select %s from `%s` %s %s", $this->fields, $this->table, $this->where,$this->order);

        $sth = Db::pdo()->prepare($sql);
        $sth->execute();

        return $sth->fetch();
    }
}

上面的代码有一个难点:

return $this;

表示方法结束后,返回的是当前对象,它可以实现链式操作。

在该类的下面,我们写一段测试代码:

//测试代码
require_once  __DIR__ . '/db.php';
$table = new Sql('student');
$data = $table->fields('no,name')->where("no=101 or sex='男'")->order('no')->fetchAll();
print_r($data);

$data = $table->order('name')->where('no=101')->fetch();
print_r($data);

因为fields() 方法返回的是当前对象,所以它可以继续调用where方法

where() 方法返回的也是当前对象,所以它可以继续执行order() 方法,

仔细观察,上面的链式操作没有先后之分。

链式操作在thinkphp框架使用的非常广泛。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李 书 明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值