日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP基于单例模式编写PDO类的方法

發布時間:2024/9/5 php 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP基于单例模式编写PDO类的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、單例模式簡介簡單的說,一個對象(在學習設計模式之前,需要比較了解面向對象思想)只負責一個特定的任務;二、為什么要使用PHP單例模式?1、php的應用主要在于數據庫應用, 所以一個應用中會存在大量的數據庫操作, 使用單例模式, 則可以避免大量的new 操作消耗的資源。2、如果系統中需要有一個類來全局控制某些配置信息, 那么使用單例模式可以很方便的實現. 這個可以參看ZF的FrontController部分。3、在一次頁面請求中, 便于進行調試, 因為所有的代碼(例如數據庫操作類db)都集中在一個類中, 我們可以在類中設置鉤子, 輸出日志,從而避免到處var_dump, echo。三、PHP基于單例模式編寫PDO類的示例代碼代碼如下:一、單例模式簡介簡單的說,一個對象(在學習設計模式之前,需要比較了解面向對象思想)只負責一個特定的任務;二、為什么要使用PHP單例模式?1、php的應用主要在于數據庫應用, 所以一個應用中會存在大量的數據庫操作, 使用單例模式, 則可以避免大量的new 操作消耗的資源。2、如果系統中需要有一個類來全局控制某些配置信息, 那么使用單例模式可以很方便的實現. 這個可以參看ZF的FrontController部分。3、在一次頁面請求中, 便于進行調試, 因為所有的代碼(例如數據庫操作類db)都集中在一個類中, 我們可以在類中設置鉤子, 輸出日志,從而避免到處var_dump, echo。三、PHP基于單例模式編寫PDO類的示例代碼代碼如下: <?php /*** MyPDO* @author Jason.Wei <jasonwei06@hotmail.com>* @license http://www.sunbloger.com/* @version 5.0 utf8*/ class MyPDO {protected static $_instance = null;protected $dbName = '';protected $dsn;protected $dbh;/*** 構造* * @return MyPDO*/private function __construct($dbHost, $dbUser, $dbPasswd, $dbName, $dbCharset){try {$this->dsn = 'mysql:host='.$dbHost.';dbname='.$dbName;$this->dbh = new PDO($this->dsn, $dbUser, $dbPasswd);$this->dbh->exec('SET character_set_connection='.$dbCharset.', character_set_results='.$dbCharset.', character_set_client=binary');} catch (PDOException $e) {$this->outputError($e->getMessage());}}/*** 防止克隆* */private function __clone() {}/*** Singleton instance* * @return Object*/public static function getInstance($dbHost, $dbUser, $dbPasswd, $dbName, $dbCharset){if (self::$_instance === null) {self::$_instance = new self($dbHost, $dbUser, $dbPasswd, $dbName, $dbCharset);}return self::$_instance;}/*** Query 查詢** @param String $strSql SQL語句* @param String $queryMode 查詢方式(All or Row)* @param Boolean $debug* @return Array*/public function query($strSql, $queryMode = 'All', $debug = false){if ($debug === true) $this->debug($strSql);$recordset = $this->dbh->query($strSql);$this->getPDOError();if ($recordset) {$recordset->setFetchMode(PDO::FETCH_ASSOC);if ($queryMode == 'All') {$result = $recordset->fetchAll();} elseif ($queryMode == 'Row') {$result = $recordset->fetch();}} else {$result = null;}return $result;}/*** Update 更新** @param String $table 表名* @param Array $arrayDataValue 字段與值* @param String $where 條件* @param Boolean $debug* @return Int*/public function update($table, $arrayDataValue, $where = '', $debug = false){$this->checkFields($table, $arrayDataValue);if ($where) {$strSql = '';foreach ($arrayDataValue as $key => $value) {$strSql .= ", `$key`='$value'";}$strSql = substr($strSql, 1);$strSql = "UPDATE `$table` SET $strSql WHERE $where";} else {$strSql = "REPLACE INTO `$table` (`".implode('`,`', array_keys($arrayDataValue))."`) VALUES ('".implode("','", $arrayDataValue)."')";}if ($debug === true) $this->debug($strSql);$result = $this->dbh->exec($strSql);$this->getPDOError();return $result;}/*** Insert 插入** @param String $table 表名* @param Array $arrayDataValue 字段與值* @param Boolean $debug* @return Int*/public function insert($table, $arrayDataValue, $debug = false){$this->checkFields($table, $arrayDataValue);$strSql = "INSERT INTO `$table` (`".implode('`,`', array_keys($arrayDataValue))."`) VALUES ('".implode("','", $arrayDataValue)."')";if ($debug === true) $this->debug($strSql);$result = $this->dbh->exec($strSql);$this->getPDOError();return $result;}/*** Replace 覆蓋方式插入** @param String $table 表名* @param Array $arrayDataValue 字段與值* @param Boolean $debug* @return Int*/public function replace($table, $arrayDataValue, $debug = false){$this->checkFields($table, $arrayDataValue);$strSql = "REPLACE INTO `$table`(`".implode('`,`', array_keys($arrayDataValue))."`) VALUES ('".implode("','", $arrayDataValue)."')";if ($debug === true) $this->debug($strSql);$result = $this->dbh->exec($strSql);$this->getPDOError();return $result;}/*** Delete 刪除** @param String $table 表名* @param String $where 條件* @param Boolean $debug* @return Int*/public function delete($table, $where = '', $debug = false){if ($where == '') {$this->outputError("'WHERE' is Null");} else {$strSql = "DELETE FROM `$table` WHERE $where";if ($debug === true) $this->debug($strSql);$result = $this->dbh->exec($strSql);$this->getPDOError();return $result;}}/*** execSql 執行SQL語句** @param String $strSql* @param Boolean $debug* @return Int*/public function execSql($strSql, $debug = false){if ($debug === true) $this->debug($strSql);$result = $this->dbh->exec($strSql);$this->getPDOError();return $result;}/*** 獲取字段最大值* * @param string $table 表名* @param string $field_name 字段名* @param string $where 條件*/public function getMaxValue($table, $field_name, $where = '', $debug = false){$strSql = "SELECT MAX(".$field_name.") AS MAX_VALUE FROM $table";if ($where != '') $strSql .= " WHERE $where";if ($debug === true) $this->debug($strSql);$arrTemp = $this->query($strSql, 'Row');$maxValue = $arrTemp["MAX_VALUE"];if ($maxValue == "" || $maxValue == null) {$maxValue = 0;}return $maxValue;}/*** 獲取指定列的數量* * @param string $table* @param string $field_name* @param string $where* @param bool $debug* @return int*/public function getCount($table, $field_name, $where = '', $debug = false){$strSql = "SELECT COUNT($field_name) AS NUM FROM $table";if ($where != '') $strSql .= " WHERE $where";if ($debug === true) $this->debug($strSql);$arrTemp = $this->query($strSql, 'Row');return $arrTemp['NUM'];}/*** 獲取表引擎* * @param String $dbName 庫名* @param String $tableName 表名* @param Boolean $debug* @return String*/public function getTableEngine($dbName, $tableName){$strSql = "SHOW TABLE STATUS FROM $dbName WHERE Name='".$tableName."'";$arrayTableInfo = $this->query($strSql);$this->getPDOError();return $arrayTableInfo[0]['Engine'];}/*** beginTransaction 事務開始*/private function beginTransaction(){$this->dbh->beginTransaction();}/*** commit 事務提交*/private function commit(){$this->dbh->commit();}/*** rollback 事務回滾*/private function rollback(){$this->dbh->rollback();}/*** transaction 通過事務處理多條SQL語句* 調用前需通過getTableEngine判斷表引擎是否支持事務** @param array $arraySql* @return Boolean*/public function execTransaction($arraySql){$retval = 1;$this->beginTransaction();foreach ($arraySql as $strSql) {if ($this->execSql($strSql) == 0) $retval = 0;}if ($retval == 0) {$this->rollback();return false;} else {$this->commit();return true;}}/*** checkFields 檢查指定字段是否在指定數據表中存在** @param String $table* @param array $arrayField*/private function checkFields($table, $arrayFields){$fields = $this->getFields($table);foreach ($arrayFields as $key => $value) {if (!in_array($key, $fields)) {$this->outputError("Unknown column `$key` in field list.");}}}/*** getFields 獲取指定數據表中的全部字段名** @param String $table 表名* @return array*/private function getFields($table){$fields = array();$recordset = $this->dbh->query("SHOW COLUMNS FROM $table");$this->getPDOError();$recordset->setFetchMode(PDO::FETCH_ASSOC);$result = $recordset->fetchAll();foreach ($result as $rows) {$fields[] = $rows['Field'];}return $fields;}/*** getPDOError 捕獲PDO錯誤信息*/private function getPDOError(){if ($this->dbh->errorCode() != '00000') {$arrayError = $this->dbh->errorInfo();$this->outputError($arrayError[2]);}}/*** debug* * @param mixed $debuginfo*/private function debug($debuginfo){var_dump($debuginfo);exit();}/*** 輸出錯誤信息* * @param String $strErrMsg*/private function outputError($strErrMsg){throw new Exception('MySQL Error: '.$strErrMsg);}/*** destruct 關閉數據庫連接*/public function destruct(){$this->dbh = null;} } ?> 四、調用方法: <?php require 'MyPDO.class.php'; $db = MyPDO::getInstance('localhost', 'root', '123456', 'test', 'utf8');//do something...$db->destruct(); ?>

  

轉載于:https://www.cnblogs.com/benpaodegegen/p/7365656.html

總結

以上是生活随笔為你收集整理的PHP基于单例模式编写PDO类的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕天堂av | 久久婷婷国产麻豆91 | 国产黄色在线播放 | 秋霞午夜网 | 新国产视频 | 色综合视频在线观看 | 孕妇丨91丨九色 | 奴性白洁会所调教 | 久久亚洲高清 | 99精品在线观看视频 | 九一国产在线观看 | 日p免费视频| 高柳家在线观看 | 免费一级特黄毛大片 | 日本高清无吗 | 欧美无吗 | 国产麻豆视频 | 午夜视频一区 | 国产精品自拍在线 | 91色九色| 美女张开腿露出尿口 | 国产一区二区三区高清视频 | 久久欧洲 | 在线黄色网 | 国内精品亚洲 | 亚洲日本欧美精品 | 日韩五码在线 | 青青草自拍视频 | 国产真实交换夫妇视频 | 五月丁香综合激情六月久久 | 午夜久久久久久久久久 | 中文字幕亚洲综合 | 色亚洲成人 | 日本啪啪网 | 91麻豆精品国产理伦片在线观看 | 91成人网页 | 日韩久久中文字幕 | 成人性生交大片免费 | 97国产在线观看 | jizz欧美大全 | 亚洲伦理在线视频 | 中文字幕永久在线观看 | 日韩免费影视 | 97xxx | 操小妞 | 国产最爽的乱淫视频国语对白 | 一级特毛片 | 熟女肥臀白浆大屁股一区二区 | 亚洲欧洲日本一区二区三区 | 日韩高清三区 | 黄片一区二区 | a∨鲁丝一区鲁丝二区鲁丝三区 | 美女靠逼视频网站 | 婷婷深爱五月 | 绿帽av | 欧美区视频 | 久久av一区| 国语对白做受按摩的注意事项 | 久久婷婷五月国产色综合激情 | 激情无遮挡 | 欧美日韩一区二区三区四区五区六区 | 欧美日韩免费在线观看 | 日韩日b| 国产精品99久久免费黑人人妻 | 一区二区不卡在线观看 | 久久人妻精品白浆国产 | 你懂的亚洲| 九九小视频 | 五月婷婷爱| 久久久久在线视频 | 动漫av网站 | 亚洲av无码久久忘忧草 | 欧美一二区 | 99热日韩 | 男人操女人的软件 | 色七七视频 | 538在线精品视频 | 欧美少妇xx | 国产aⅴ精品 | 乱色专区 | 国产91边播边对白在线 | 日韩精品在线免费观看 | 激情午夜网 | 欧美日韩乱国产 | 亚洲视频456| 美日韩毛片| 天天干天天草 | 久久人人爽人人爽人人片亚洲 | 少女逼逼| 在线一区二区三区四区五区 | 国产99久久久国产精品成人免费 | 九九在线 | 日韩无马 | 亚洲欧美在线观看 | 在线看片国产 | 在线观看国产一级片 | 午夜亚洲成人 | 免费av影片 | 午夜视频在线免费观看 |