mysql 大量空连接_一个PDO数据库连接类库,以后有空会扩展和更新PHP协同Mysql处理大量数据的一些方法,望大家常来...

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 = '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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值