生活随笔
收集整理的這篇文章主要介紹了
开发自己的框架——(二)数据库工具类的封装
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為了讓框架的內容與數據分離,我們把常用的類封裝到一個工具類中,當用到這些方法時,就調用這個封裝好的類,能夠使代碼的復用性得到很大的提高。
首先,封裝數據庫相關操作,為了使封裝規范化,我們創建一個接口讓數據庫實現接口中的方法,數據庫使用PDO擴展訪問數據。
數據庫接口類?
I_DAO.interface.php
<?php
interface?I_DAO
{//查詢所有數據的功能public?function?getAll($sql='');
//????//查詢一條數據public?function?getRow($sql='');
//????//查詢一個字段的值public?function?getOne($sql='');
//????//執行增刪改的功能public?function?exec($sql='');
//????(查詢的時候,返回的結果數)public?function?resultRows();
//????//查詢執行插入操作返回的主鍵的值public?function?lastInsertId();
//????//public?function?query($sql='');
//????//轉義引號、并包裹的public?function?escapeData($data='');
}
數據庫工具類中,對象只能通過靜態方法創建一個實例(單例模式),不能通過克隆和繼承創建對象,數據庫的連接信息通過數組傳遞到方法中,工具類中有查詢所有數據方法、查詢一條數據方法、獲得一個字段值的方法、實現增刪改方法、
返回結果數量的方法等。
數據庫操作工具類
DAOPDO.class.php
<?phpclass?DAOPDO?implements?I_DAO
{????private?$host;private?$dbname;private?$user;private?$pass;private?$port;private?$charset;//該屬性保存pdo對象private?$pdo;//查詢語句返回的結果集數量private?$resultRows;//私有屬性保存該該實例private?static?$instance;//私有的構造方法private?function?__construct($option=array()){//初始化服務器的配置$this?->?initOptions($option);//初始化PDO對象$this?->?initPDO();}//私有的克隆方法private?function?__clone(){}//公共的靜態方法實例化單例對象public?static?function?getSingleton($options=array()){if(!self::$instance?instanceof?self){//實例化self::$instance?=?new?self($options);}return?self::$instance;}//初始化服務器的配置private?function?initOptions($option){$this?->?host?=?isset($option['host'])?$option['host']:'';$this?->?dbname?=?isset($option['dbname'])?$option['dbname']:'';$this?->?user?=?isset($option['user'])?$option['user']:'';$this?->?pass?=?isset($option['pass'])?$option['pass']:'';$this?->?port?=?isset($option['port'])?$option['port']:'';$this?->?charset?=?isset($option['charset'])?$option['charset']:'';}//初始化PDO對象private?function?initPDO(){$dsn?=?"mysql:host=$this->host;dbname=$this->dbname;port=$this->port;charset=$this->charset";$this?->?pdo?=?new?PDO($dsn,$this->user,$this->pass);}//封裝pdostatement對象public?function?query($sql=""){????//返回pdo_statement對象return?$this->pdo?->?query($sql);}//查詢所有數據public?function?getAll($sql=''){$pdo_statement?=?$this->query($sql);$this->resultRows?=?$pdo_statement?->?rowCount();if($pdo_statement==false){//輸出SQL語句的錯誤信息$error_info?=?$this->pdo->?errorInfo();$err_str?=?"SQL語句錯誤,具體信息如下:<br>".$error_info[2];echo?$err_str;return?false;}$result?=?$pdo_statement?->?fetchAll(PDO::FETCH_ASSOC);return?$result;}//查詢一條記錄public?function?getRow($sql=''){$pdo_statement?=?$this->query($sql);if($pdo_statement==false){//輸出SQL語句的錯誤信息$error_info?=?$this->pdo->?errorInfo();$err_str?=?"SQL語句錯誤,具體信息如下:<br>".$error_info[2];echo?$err_str;return?false;}$result?=?$pdo_statement?->?fetch(PDO::FETCH_ASSOC);return?$result;}//獲得一個字段的值public?function?getOne($sql=''){$pdo_statement?=?$this->query($sql);if($pdo_statement==false){//輸出SQL語句的錯誤信息$error_info?=?$this->pdo->?errorInfo();$err_str?=?"SQL語句錯誤,具體信息如下:<br>".$error_info[2];echo?$err_str;return?false;}//返回查詢的字段的值,我們在執行sql語句之前就應該明確查詢的是哪個字段,這樣fetchColumn就已經知道查詢的字段值$result?=?$pdo_statement?->?fetchColumn();return?$result;}//實現非查詢的方法public?function?exec($sql=''){$result?=?$this->pdo?->?exec($sql);//===為了區分?受影響的記錄數是0的情況if($result===false){$error_info?=?$this->pdo->?errorInfo();$err_str?=?"SQL語句錯誤,具體信息如下:<br>".$error_info[2];echo?$err_str;return?false;}return?$result;}//查詢語句返回的結果數量public?function?resultRows(){return?$this->resultRows;}//返回上次執行插入語句返回的主鍵值public?function?lastInsertId(){return?$this->pdo->lastInsertId();}//數據轉義并引號包裹public?function?escapeData($data=''){return?$this->pdo->quote($data);}
}
轉載于:https://blog.51cto.com/flowstone/1845424
總結
以上是生活随笔為你收集整理的开发自己的框架——(二)数据库工具类的封装的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。