php namespace继承pdo,数据库连接类,继承自PDO

/**

* 数据库连接类,继承自PDO

*/

class DataBase extends PDO  {

private $dsn       = "mysql:host=127.0.0.1;dbname=test";

private $username = "root";

private $password = "123456";

/**

* 构造函数

*

*/

public function __construct() {

PDO::__construct($this->dsn, $this->username, $this->password, array(PDO::ATTR_PERSISTENT => true));

parent::exec('set names utf8');

parent::setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

}

/**

* 析构函数

*

*/

public function __destruct() {

}

/**

* 执行单一的SELECT语句

*

* @param string $sql 待执行的SQL语句

* @param string $fetch_style 以哪种形式返回数据 PDO::FETCH_ASSOC PDO::FETCH_NUM PDO::FETCH_BOTH 等

* @return array

*/

function aQuery($sql,$fetch_style=PDO::FETCH_ASSOC) {

try {

$stmt = $this->query($sql);

return $stmt->fetchAll($fetch_style);

} catch (Exception $e) {

try {

return $this->exec($sql);

} catch (Exception $e) {

die($e->getMessage());

}

}

}

/**

* 执行带有绑定参数的SQL语句

*

* @param string $sql 要执行的SQL语句

* @param array $array 绑定的参数

* @param string $fetch_style 以哪种形式返回数据 PDO::FETCH_ASSOC PDO::FETCH_NUM PDO::FETCH_BOTH 等

* @return array or bool

*/

function moreExec($sql,$array=array(),$fetch_style=PDO::FETCH_ASSOC) {

try {

$stmt = $this->prepare($sql);

if(count($array) > 0) {

foreach ($array as $k => $v) {

$stmt->bindValue($k,$v);

}

}

if(substr(trim($sql),0,6) == 'select') {

$stmt->execute();

return $stmt->fetchAll($fetch_style);

} else {

return $stmt->execute();

}

} catch (Exception $e) {

die($e->getMessage());

}

}

/**

* 执行带参数的语句,并返回总数 主要用于带分页的SELECT语句

*

* @param string or array $sql 要执行的SQL语句

* @param array $array 绑定的参数

* @param string $fetch_style 以哪种形式返回数据 PDO::FETCH_ASSOC PDO::FETCH_NUM PDO::FETCH_BOTH 等

* @return array

*/

function moreExecCount($sql,$array=array(),$fetch_style=PDO::FETCH_ASSOC) {

$patterns[0] = "/select .*? from/i";

$patterns[1] = "/from (\w+) (.*?) where/i";

$patterns[2] = "/group by (.*?) limit/i";

$patterns[3] = "/having (.*?) limit/i";

$patterns[4] = "/order by (.*?) limit/i";

$patterns[5] = "/limit (\d+),(\d+)/i";

$patterns[6] = "/limit (\d+)/i";

$replacements[0] = 'select count(*) as sum from';

$replacements[1] = "from \$1 where";

$replacements[2] = 'limit';

$replacements[3] = 'limit';

$replacements[4] = 'limit';

$replacements[5] = '';

$replacements[6] = '';

$sqlCount = preg_replace($patterns, $replacements, $sql);

$sum = $this->moreExec($sqlCount,$array);

return array($this->moreExec($sql,$array,$fetch_style), 'sum'=>$sum[0]['sum']);

}

/**

* 执行一个事务

*

* @param array $sql_array 一些需要同时执行的SQL语句

* @return bool

*/

function Transaction($sql_array) {

try {

$this->beginTransaction();

foreach ($sql_array as $sql) {

$s = trim($sql);

if(substr($s,0,6) == 'select') {

$this->aQuery($s);

} else {

$this->exec($s);

}

}

$this->commit();

return true;

} catch (Exception $e) {

$this->rollBack();

return false;

}

}

}

?>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值