博主信息
epoll404
博文
17
粉丝
1
评论
0
访问量
800
积分:0
P豆:60

简单利用已学PHP函数、方法以及可变长度参数打造PDO查询生成器-1125

2019年11月26日 02:13:43阅读数:147博客 / epoll404 / php

php函数(方法)简单总结:

语法体为:function 函数名(前面可以跟约束类型(string array ... int)  (形参前面可以有寻址符,也叫引用符&)形参){    函数体}example:function get(array $arr){ return implode(':',$arr);}

具体综合用法在这个PDO查询生成器的实战中:

<?phpnamespace Database;   //定义Database命名空间use PDO; //引用PDO//创建db类class db{    //定义$link受保护属性    protected $link;    //定义受保护的$options属性,用来存储field,table,where,order,limit..... having,group 暂时没写    protected $options=[        'field'=>'*','table'=>'','where'=>'','order'=>'','limit'=>''    ];    //构造函数,这里用到了约束类型,array    public function __construct(array $config)    {        //调用connect方法        $this->connect($config);    }    //初始化数据链接条件,创建pdo对象链接数据并保存到link变量    protected function connect(array $config)    {        $dsn = sprintf("%s:host=%s;dbname=%s;charset=%s",            $config['type'],            $config['host'],            $config['name'],            $config['charset']        );        $this->link = new PDO($dsn,$config['user'],$config['pass'],[PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC]);    }    //构造query查询方法,接收sql语句,以及数组参数。执行后直接返回数据这里用到了约束类型string array    public function query(string $sql, array $vars)    {        $sth = $this->link->prepare($sql);        $sth->execute($vars);        return $sth->fetchAll();    }    //执行方法,接收查询语句后,直接返回执行    public function execute(string $sql, array $vars)    {        $sth = $this->link->prepare($sql);        return $sth->execute($vars);    }    //创建table方法,接收$table传参后保存对象并返回    public function table(string $table)    {        $this->options['table'] = $table;        return $this;    }   //创建field方法,这里用到了语法糖可变长参数...,因为查询字段不固定,...很实用的处理了这个问题,    //用implode函数构造出正确的字段并返回    public function field(...$fields)    {        $this->options['field'] = '`'.implode('`,`',$fields).'`';        return $this;    }    //创建where方法 保存对象并返回    public function where(...$where)    {        $this->options['where'] = 'WHERE '.implode(',',$where);        return $this;    }    //创建get方法,执行查询最后返回结果集    public function get()    {        $sql = "SELECT {$this->options['field']} FROM {$this->options['table']} {$this->options['where']}";        echo $sql.'<br >';        $sth =$this->link->prepare($sql);        $sth->execute();        return $sth->fetchAll();    }}
<?php//检查php.ini配置文件里的display_error是否设置,没设置就设置开启if (!ini_get("display_errors")){    ini_set("display_errors",1);}use Database\db;//引入命名空间$config = include 'config.php'; //加载数据库配置文件include "db.php";//加载数据库里try{    $db = new db($config); //创建一个$db对象    /*测试语句    $db->execute("INSERT INTO user SET username=?,password=?",['ayaya',md5('123456')]);    $rows = $db->query("SELECT * FROM user WHERE id>:id",[':id'=>1]);    print_r($rows);*/    $row = $db->table('user')->where('id>0')->get();//执行链式操作    dd($row);  //格式化数据并打印,今天终于开始学函数了,立马自己写个简单的试试,哈哈哈!}catch (Exception $e){    die("数据库链接出错:".$e->getMessage());}function dd(array $vars){    echo '<pre>';    print_r($vars);}



后续将会接着完善功能以及加入(interface)接口和(Factory)工厂类用单例模式,根据model类名来对应表名,接着继续练习、完善PDO对数据库的操作

批改老师:欧阳克欧阳克

批改状态:合格

老师批语:非常不错,自己已经学了很多东西,继续努力。

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
暂无评论暂无评论!