<?php /** * 數(shù)據(jù)庫連接類,繼承自PDO */ class DataBase extends PDO { private $dsn = "mysql:host=127.0.0.1;dbname=test"; private $username = "root"; private $password = "123456"; /** * 構(gòu)造函數(shù) * */ 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); } /** * 析構(gòu)函數(shù) * */ public function __destruct() { } /** * 執(zhí)行單一的SELECT語句 * * @param string $sql 待執(zhí)行的SQL語句 * @param string $fetch_style 以哪種形式返回數(shù)據(jù) 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()); } } } /** * 執(zhí)行帶有綁定參數(shù)的SQL語句 * * @param string $sql 要執(zhí)行的SQL語句 * @param array $array 綁定的參數(shù) * @param string $fetch_style 以哪種形式返回數(shù)據(jù) 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()); } } /** * 執(zhí)行帶參數(shù)的語句,并返回總數(shù) 主要用于帶分頁的SELECT語句 * * @param string or array $sql 要執(zhí)行的SQL語句 * @param array $array 綁定的參數(shù) * @param string $fetch_style 以哪種形式返回數(shù)據(jù) 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']); } /** * 執(zhí)行一個事務 * * @param array $sql_array 一些需要同時執(zhí)行的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; } } } ?>
|