博客列表 >写一个链式的数据库查询过程——2019年8月1日22时10分

写一个链式的数据库查询过程——2019年8月1日22时10分

嘿哈的博客
嘿哈的博客原创
2019年08月04日 23:30:21745浏览

类常量用const定义,访问方法一样用 self:: 与静态属性调用一样

属性重载可以用 __get(); __set($name,$value); __isset($name); __unset($name);

方法重载:__call(); __callStatic();

创建一个方法以调用该类中不存在的一个方法时使用此函数 __call();

创建一个静态方法以调用该类中不存在的一个方法时使用此函数 __callStatic();

用call_user_args_array()访问类中的方法

访问类中方法call_user_args_array([类名,'方法名'],[值value]);

访问类中静态方法call_user_args_array([__NAMESPACE.'\类名:方法名','方法名'],[值value]);

用完整类名访问静态方法call_user_args_array([Test:class,'方法名'],[value])

演示效果网站 pc.wenbus.cn/0801/index.php

实例

<?php
    namespace demo1;

    require 'data.php';

    use demo2\sql;

    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();
            //实例化
            $data = new sql(self::$pdo);
            //执行查询
            return call_user_func_array([$data,$name],$arguments);
        }

    }
        $result = Db::table('staff')
                ->field('staff_id,name,position,age,sex')
                ->where('staff_id> 0')
                ->select();

//        foreach ($result as $data){
//            echo '<pre>'.print_r($data).'<br>';
//        }
//    ?>

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>链式数据库查询</title>
    </head>
    <body>
        <table border="1px solid black">
            <tr>
                <td style="width: 100px;text-align: center">序号</td>
                <td style="width: 100px;text-align: center">姓名</td>
                <td style="width: 100px;text-align: center">性别</td>
                <td style="width: 100px;text-align: center">职业</td>
                <td style="width: 100px;text-align: center">年龄</td>
            </tr>
            <?php foreach ($result as $data) {?>
                <tr>
                <td><?php echo $data['staff_id'] ?></td>
                <td><?php echo $data['name'] ?></td>
                <td><?php echo $data['sex'] ?></td>
                <td><?php echo $data['position'] ?></td>
                <td><?php echo $data['age'] ?></td>
                </tr>
            <?php } ?>
        </table>
    </body>
    </html>

运行实例 »

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

实例

<?php

    namespace demo2;

    class sql
    {
        public $pdo = null;
        //数据表
        public $table ;
        //字段名
        public $field = '*';
        //查询条件
        public $where;
        //显示数量
        public $limit;

        //构造方法
        public function __construct($pdo)
        {
            $this->pdo = $pdo;
        }

        //设置表名
        public function table($tableName){
            $this->table = $tableName;
            return $this;
        }
        //设置字段名
        public function field($field='*'){
            $this->field = empty($field) ? '*' : $field;
            return $this;
        }
        //设置查询条件
        public function where($where= ''){
            $this->where = empty($where) ? $where : ' WHERE '.$where;
            return $this;
        }
        //设置显示数量
        public function limit($limit= ''){
            $this->limit = empty($limit) ? $limit : ' LIMIT '.$limit;
            return $this;
        }
        //sql语句
        public function select(){
            $sql = 'SELECT '
                . $this->field
                . ' FROM '
                . $this->table
                .$this->where
                .$this->limit;
            $stmt = $this->pdo->prepare($sql);

            $stmt->execute();
//            die($stmt->debugDumpParams());
            return $stmt->fetchAll(\PDO::FETCH_ASSOC);
        }

    }

运行实例 »

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



声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议