您好,登錄后才能下訂單哦!
為了讓框架的內容與數據分離,我們把常用的類封裝到一個工具類中,當用到這些方法時,就調用這個封裝好的類,能夠使代碼的復用性得到很大的提高。
首先,封裝數據庫相關操作,為了使封裝規范化,我們創建一個接口讓數據庫實現接口中的方法,數據庫使用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
<?php class 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); } }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。