PHP的PDO數據庫操作類
一個簡單的PDO類封裝。。僅供學習交流
PdoDb 數據庫類
<?php
/**
* @throws Error
* PDO數據庫
*/
class PdoDb extends DatabaseAbstract
{
/**
* PDO實例
* @var PDO
*/
protected $DB;
/**
* PDO準備語句
* @var PDOStatement
*/
protected $Stmt;
/**
* 最后的SQL語句
* @var string
*/
protected $Sql;
/**
* 配置信息 $config=array('dsn'=>xxx,'name'=>xxx,'password'=>xxx,'option'=>xxx)
* @var array
*/
protected $Config;
/**
* 構造函數
* @param array $config
*/
public function __construct($config)
{
$this->Config = $config;
}
/**
* 連接數據庫
* @return void
*/
public function connect()
{
$this->DB = new PDO($this->Config['dsn'], $this->Config['name'], $this->Config['password'], $this->Config['option']);
//默認把結果序列化成stdClass
$this->DB->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
//自己寫代碼捕獲Exception
$this->DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
}
/**
* 斷開連接
* @return void
*/
public function disConnect()
{
$this->DB = null;
$this->Stmt = null;
}
/**
* 執行sql,返回新加入的id
* @param string $statement
* @return string
*/
public function exec($statement)
{
if ($this->DB->exec($statement)) {
$this->Sql = $statement;
return $this->lastId();
}
$this->errorMessage();
}
/**
* 查詢sql
* @param string $statement
* @return PdoDb
*/
public function query($statement)
{
$res = $this->DB->query($statement);
if ($res) {
$this->Stmt = $res;
$this->Sql = $statement;
return $this;
}
$this->errorMessage();
}
/**
* 序列化一次數據
* @return mixed
*/
public function fetchOne()
{
return $this->Stmt->fetch();
}
/**
* 序列化所有數據
* @return array
*/
public function fetchAll()
{
return $this->Stmt->fetchAll();
}
/**
* 最后添加的id
* @return string
*/
public function lastId()
{
return $this->DB->lastInsertId();
}
/**
* 影響的行數
* @return int
*/
public function affectRows()
{
return $this->Stmt->rowCount();
}
/**
* 預備語句
* @param string $statement
* @return PdoDb
*/
public function prepare($statement)
{
$res = $this->DB->prepare($statement);
if ($res) {
$this->Stmt = $res;
$this->Sql = $statement;
return $this;
}
$this->errorMessage();
}
/**
* 綁定數據
* @param array $array
* @return PdoDb
*/
public function bindArray($array)
{
foreach ($array as $k => $v) {
if (is_array($v)) {
//array的有效結構 array('value'=>xxx,'type'=>PDO::PARAM_XXX)
$this->Stmt->bindValue($k + 1, $v['value'], $v['type']);
} else {
$this->Stmt->bindValue($k + 1, $v, PDO::PARAM_STR);
}
}
return $this;
}
/**
* 執行預備語句
* @return bool
*/
public function execute()
{
if ($this->Stmt->execute()) {
return true;
}
$this->errorMessage();
}
/**
* 開啟事務
* @return bool
*/
public function beginTransaction()
{
return $this->DB->beginTransaction();
}
/**
* 執行事務
* @return bool
*/
public function commitTransaction()
{
return $this->DB->commit();
}
/**
* 回滾事務
* @return bool
*/
public function rollbackTransaction()
{
return $this->DB->rollBack();
}
/**
* 拋出錯誤
* @throws Error
* @return void
*/
public function errorMessage()
{
$msg = $this->DB->errorInfo();
throw new Error('數據庫錯誤:' . $msg[2]);
}
//---------------------
/**
* 單例實例
* @var PdoDb
*/
protected static $_instance;
/**
* 默認數據庫
* @static
* @param array $config
* @return PdoDb
*/
public static function instance($config)
{
if (!self::$_instance instanceof PdoDb) {
self::$_instance = new PdoDb($config);
self::$_instance->connect();
}
return self::$_instance;
}
//----------------------
/**
* 獲取PDO支持的數據庫
* @static
* @return array
*/
public static function getSupportDriver(){
return PDO::getAvailableDrivers();
}
/**
* 獲取數據庫的版本信息
* @return array
*/
public function getDriverVersion(){
$name = $this->DB->getAttribute(PDO::ATTR_DRIVER_NAME);
return array($name=>$this->DB->getAttribute(PDO::ATTR_CLIENT_VERSION));
}
}
使用的時候
PdoDb::instance($config);
本文由用戶 ouhp9343 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!