日韩性视频-久久久蜜桃-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类的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 丁香七月婷婷 | 欧美日韩99 | 亚洲男女视频 | 国产极品福利 | 国产伦精品一区二区三区在线 | 中日毛片| 黄色av国产 | 日韩国产精品一区二区 | 国产欧美一区二区三区四区 | 可以免费观看的av网站 | 成人免费网站www网站高清 | 女女互磨互喷水高潮les呻吟 | 午夜精品在线播放 | 日韩欧美的一区二区 | 免费观看黄色网页 | 免费看的一级片 | 国产精品视频久久久 | 四季av中文字幕 | 国产精品嫩草影院av蜜臀 | 肉肉av福利一精品导航 | 久久不卡视频 | 蜜桃视频免费网站 | 婷婷综合激情 | 日韩在线视频免费播放 | 日韩在线三区 | 一级免费av | 天天操人人爽 | 久福利| 欧美另类高清videos的特点 | av在线免播放器 | 日韩va中文 | 国产粉嫩白浆 | 狠狠操天天射 | 少妇又色又紧又爽又刺激视频 | 青青草原综合久久大伊人精品 | 色站在线 | 欧美大尺度做爰啪啪床戏明星 | 国产一级一级 | 朝桐光一区二区三区 | 日韩亚射吧 | 日本成人午夜 | 在线视频三区 | 成人久久久精品国产乱码一区二区 | 亚洲一区二区免费看 | 日本特黄一级大片 | 欧美一区二区福利 | 欧美日韩影院 | 黄色小视频在线观看 | 一本色道无码道dvd在线观看 | 五月婷在线观看 | 青青草精品 | 这里精品 | 肉丝肉足丝袜一区二区三区 | 免费看日批视频 | 国产一区二区视频免费 | 中日黄色片 | 日韩视频在线免费观看 | 色av中文字幕| 亚洲欧美日韩国产一区二区三区 | 无遮挡裸光屁屁打屁股男男 | 丰满大乳露双乳呻吟 | 亚洲黄色在线观看视频 | 日本夫妻性生活视频 | 欧美精品乱码久久久久久按摩 | 亚洲自拍另类 | 国产亚洲精品久久久久久无几年桃 | 亚洲精品福利网站 | 福利资源在线观看 | 91中文字幕在线 | 天堂免费av | 交视频在线播放 | 亚洲精品高清视频在线观看 | 97在线免费观看 | 黄污视频在线播放 | 国产精品v亚洲精品v日韩精品 | 日韩少妇一区 | mm1313亚洲国产精品美女 | 久久一级大片 | 美女屁股眼视频免费 | 亚洲精品美女网站 | 亚洲人精品午夜射精日韩 | 久久久久网 | 激情网久久 | 日本人妻不卡一区二区三区中文字幕 | 91香蕉在线视频 | 欧美呦呦呦 | 91传媒入口 | 在线高清av | 香蕉久久久久 | 久久精品人妻一区二区三区 | 在线观看一区二区三区视频 | 粗大的内捧猛烈进出视频 | 69av网 | 日本性久久| 欧美人和黑人牲交网站上线 | 欧美成人免费高清视频 | 国产噜噜噜 | 久久精品8 | 色秀视频在线观看 |