博主信息
epoll404
博文
16
粉絲
1
評論
0
訪問量
677
積分:0
P豆:58

簡單利用已學PHP函數、方法以及可變長度參數打造PDO查詢生成器-1125

2019年11月26日 02:13:43閱讀數:125博客 / 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對數據庫的操作

批改老師:歐陽克歐陽克

批改狀態:合格

老師批語:非常不錯,自己已經學了很多東西,繼續努力。

全部評論

文明上網理性發言,請遵守新聞評論服務協議

條評論
暫無評論暫無評論!
  • 足彩吧合买平台