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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

php 单例类 mysql pdo_PHP实战:PHP基于单例模式编写PDO类的方法

發布時間:2025/3/20 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 单例类 mysql pdo_PHP实战:PHP基于单例模式编写PDO类的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

《PHP實戰:PHP基于單例模式編寫PDO類的方法》要點:

本文介紹了PHP實戰:PHP基于單例模式編寫PDO類的方法,希望對您有用。如果有疑問,可以聯系我們。

一、單例模式簡介

簡單的說,一個對象(在學習設計模式之前,需要比較了解面向對象思想)只負責一個特定的任務;PHP實戰

二、為什么要使用PHP單例模式?

PHP實戰

1、php的應用主要在于數據庫應用, 所以一個應用中會存在大量的數據庫操作, 使用單例模式, 則可以避免大量的new 操作消耗的資源.

PHP實戰

2、如果系統中需要有一個類來全局控制某些配置信息, 那么使用單例模式可以很方便的實現. 這個可以參看ZF的FrontController部分.

PHP實戰

3、在一次頁面請求中, 便于進行調試, 因為所有的代碼(例如數據庫操作類db)都集中在一個類中, 我們可以在類中設置鉤子, 輸出日志,從而避免到處var_dump, echo.PHP實戰

三、PHP基于單例模式編寫PDO類的示例代碼

PHP實戰

代碼如下:PHP實戰

/**

* MyPDO

* @author Jason.Wei

* @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();

?>

五、總結

PHP實戰

以上就是PHP基于單例模式編寫PDO類的全部內容,希望對大家學習或者使用PHP能有所幫助,如果有疑問大家可以留言交流,謝謝大家對維易PHP的支持.

PHP實戰

總結

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

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

主站蜘蛛池模板: 青娱网电信一区电信二区电信三区 | 国内露脸中年夫妇交换 | 91国产精品| 67194少妇在线观看 | 熟妇人妻一区二区三区四区 | 综合成人在线 | 成人午夜视频在线播放 | 日韩精品无码一本二本三本色 | 欧美交换国产一区内射 | 亚洲天堂av一区二区 | 伊人伊人网 | 免费毛片在线播放免费 | 人人干夜夜操 | 亚洲日本三级 | 香蕉综合网 | 秘密的基地| 国内外免费激情视频 | 91成人亚洲 | 欧美狠狠爱 | 欧美日韩大片在线观看 | 制服丝袜一区二区三区 | 日韩丰满少妇无码内射 | 久久久久久91亚洲精品中文字幕 | 免费在线观看黄网 | 亚洲欧美精品在线观看 | 亚洲av日韩av在线观看 | 日韩精品无码一本二本三本色 | 一区二区三区色 | 天堂成人av | 白嫩情侣偷拍呻吟刺激 | 乐播av一区二区三区 | 天天操你 | 国产精品成人3p一区二区三区 | 毛片综合 | 在线视频欧美亚洲 | 黄色aaa大片| 第九色 | aise爱色av| 久久日av| 中文字幕在线日韩 | 精品动漫一区二区三区的观看方式 | 成人在线中文字幕 | 日韩欧美精品久久 | 精品国产乱码久久久人妻 | 99久久久国产精品无码性 | 偷偷色噜狠狠狠狠的777米奇 | 97人妻人人澡人人爽人人精品 | 狠狠做深爱婷婷综合一区 | 超碰牛牛 | 精品无码国产一区二区三区av | 国色天香一区二区 | 黄色a网| 99ri视频| 国产视频在线一区二区 | 93看片淫黄大片一级 | 性欧美欧美巨大69 | 欧洲亚洲激情 | 久久久久久久久久成人 | sm久久捆绑调教精品一区 | 激情黄色小视频 | 女女av在线| 久久久久久中文 | 亚洲最大免费视频 | 日韩 国产 欧美 | 欧美乱妇高清无乱码 | 亚洲欧美综合视频 | 精品孕妇一区二区三区 | 毛片基地在线播放 | 精品国产乱码久久久久久影片 | 欧美极品在线播放 | 动漫美女被到爽 | 精品久久福利 | 欧美午夜激情影院 | 会喷水的亲姐姐 | 成人污污视频在线观看 | 杨贵妃颤抖双乳呻吟求欢小说 | 能看的毛片| av私库在线观看 | 亚洲综合久久av一区二区三区 | 秘密基地在线观看完整版免费 | 寻找身体恐怖电影免费播放 | 国产丰满大乳奶水在线视频 | 二十四小时在线更新观看 | 国产精品久久久久久精 | 黄色在线小视频 | 日韩午夜毛片 | 日韩国产第一页 | 巨胸爆乳美女露双奶头挤奶 | www四虎| 少妇人妻在线视频 | 毛片官网 | 中文一级片| 午夜激情一区二区 | 男女草比视频 | 特级淫片裸体免费看 | 超碰91人人 | 国产精品毛片一区二区在线看 | 日韩av激情| 亚洲va天堂va欧美ⅴa在线 |