PDO.class.php * version 1.0 */class DB{protected static $_instance = null;protected $dbName = '';protected $dsn;protected $dbh;/** * 构造函数 */private function __construct($dbHost,$dbUser,$dbPasswd,$dbName,$dbCharset){try{$this-dsn = '
* version 1.0 */ class DB{ protected static $_instance = null; protected $dbName = ''; protected $dsn; protected $dbh; /** * 构造函数 */ 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(){} /** * 实例化一个数据库 * @param [string] $dbName * @param [string] $dbUser * @param [string] $dbPasswd * @param [string] $dbName * @param [string] $dbCharset * @return [object] 数据库实例 */ public function getInstance($dbHost,$dbUser,$dbPasswd,$dbName,$dbCharset){ if(self::$_instance==null){ self::$_instance = new self($dbHost,$dbUser,$dbPasswd,$dbName,$dbCharset); } return self::$_instance; } /** * [query description] * @param [string] $sqlstr [查询字符串] * @param string $querymode [查询模式,All:全部|Row:单条] * @param boolean $debug [是否返回sql语句,默认false] * @return [array] $result [数据] */ public function query($sqlstr,$querymode='All',$debug=false){ if($debug==true) $this->debug($sqlstr); $recordset = $this->dbh->query($sqlstr); $this->getPDOError(); if($recordset){ $recordset->setFetchMode(PDO::FETCH_ASSOC); if($querymode=='All'){ $result = $recordset->fetchAll(); }elseif($querymode=='Row'){ $result = $recordset->fetch(); } }else{ $result = ''; } return $result; } /** * [update 更新] * @param [type] $table [表名] * @param [type] $arrayDataValue [数据] * @param string $where [条件] * @param [type] $debug [错误输出] * @return [type] [description] */ public function update($table,$arrayDataValue,$where='',$debug=false){ $this->checkFields($table,$arrayDataValue); if($where){ $strSql = ''; foreach($arrayDataValue as $key => $val){ $strSql.=','.$key.'="'.$val.'"'; } $strSql = substr($strSql,1); $strSql = 'update '.$table.' set '.$strSql.' where '.$where; }else{ $strSql = 'replace into '.$table.'('.implode(',',array_keys($arrayDataValue)).') values("'.implode('","',$arrayDataValue).'")'; } $result = $this->execSql($strSql,$debug); return $result; } /** * [insert 插入] * @param [type] $table [表名] * @param [type] $arrayDataValue [数据] * @param boolean $debug [调试] * @return [type] [description] */ public function insert($table,$arrayDataValue,$debug=false){ $this->checkFields($table,$arrayDataValue); $strSql = 'insert into '.$table.'('.implode(',',array_keys($arrayDataValue)).') values("'.implode('","',$arrayDataValue).'")'; $result = $this->execSql($strSql,$debug); return $result; } /** * [replace 覆盖,需有主键ID] * @param [type] $table * @param [type] $arrayDataValue * @param boolean $debug * @return [type] */ public function replace($table,$arrayDataValue,$debug=false){ $this->checkFields($table,$arrayDataValue); $strSql = 'replace into '.$table.'('.implode(',',array_keys($arrayDataValue)).') values("'.implode('","',$arrayDataValue).'")'; $result = $this->execSql($strSql,$debug); return $result; } /** * [delete 删除] * @param [string] $table * @param string $where * @param boolean $debug * @return [type] */ public function delete($table,$where='',$debug=false){ if($where == ''){ $this->outputError('where is Null'); }else{ $strSql = 'delete from '.$table.' where '.$where; $result = $this->execSql($strSql,$debug); return $result; } } /** * [execSql 执行sql] * @param [type] $strSql * @param boolean $debug * @return [type] */ public function execSql($strSql,$debug=false){ if($debug==true) $this->debug($strSql); $result = $this->dbh->exec($strSql); $this->getPDOError(); return $result; } /** * [getMaxValue 获取最大值] * @param [type] $table * @param [type] $fields_name * @param string $where * @param boolean $debug * @return [type] */ public function getMaxValue($table,$fields_name,$where='',$debug=false){ $strSql = 'select max('.$fields_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; } /*获取字段总数*/ public function getCount($table,$fields_name,$where='',$debug=false){ $strSql = 'select count('.$fields_name.') as NUM from '.$table; if($where!='') $strSql.=' where '.$where; if($debug==true) $this->debug($strSql); $arrTemp = $this->query($strSql,'Row'); return $arrTemp['NUM']; } /*获得表引擎*/ public function getTableEngine($dbName,$tableName){ $strSql = 'show table status from '.$dbName.' where name="'.$tableName.'"'; $arrayTableInfo=$this->query($strSql); $this->getPDOError(); return $arrayTableInfo[0]['Engine']; } /*开始事务*/ private function beginTransaction(){ $this->dbh->beginTransaction(); } /*提交事务*/ private function commit(){ $this->dbh->commit(); } /*火棍事务*/ private function rollback(){ $this->dbh->rollback(); } /*执行事务*/ 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] $arrayDataValue [数据:字段名:数据] */ private function checkFields($table,$arrayFields){ $fields = $this->getFields($table); foreach ($arrayFields as $key => $value) { if(!in_array($key,$fields)){ $this->outputError('unkown columns'.$key.' in fields list'); } } } /** * [getFields 获得表字段] * @param [string] $table [表名称] * @return [array] $fields [表字段数组] */ 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 $a) { $fields[]=$a['Field']; } return $fields; } /** * 捕捉PDO错误异常信息 * @return [type] [description] */ private function getPDOError(){ if($this->dbh->errorCode()!='00000'){ $arrayError = $this->dbh->errorInfo(); $this->outputError($arrayError[2]); } } /** * [outputError 输出错误信息] * @param [type] $strErrMsg [错误信息] * @return [type] [description] */ private function outputError($strErrMsg) { throw new Exception('MySQL Error: '.$strErrMsg); } /** * debug sql语句错误信息 * @param mixed $debuginfo */ private function debug($debuginfo){ var_dump($debuginfo); exit(); } /** * [destruct 关闭数据库连接] * */ public function destruct(){ $this->dbh = null; } } ?>PDO.zip PDO.zip