PDO Mysql数据库类

  • 内容
  • 评论
  • 相关

之前介绍过MYSQL的php操作,主要介绍了Mysqli,PDO也就大致说了下,今天就不多说了,放出一个PDO的类
1330062679763

<?php 
/* #Small Desert 
 #iTiYun.Com */ 
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; 
 } 
} 
 
?> 

这个类非常强大,我自己也是在使用!满足现状的需求!至与来源我就不太清楚了。我只是代码的搬运工。知道的来找我,

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

music cover

歌名

歌手

00:00/00:00

歌名 歌手 时长