php封裝的pdo數(shù)據(jù)庫操作工具類與用法示例
本文實(shí)例講述了php封裝的pdo數(shù)據(jù)庫操作工具類與用法。分享給大家供大家參考,具體如下:
<?php header("Content-Type:text/html;charset=utf-8"); class PdoMysql{ public static $config = array();//設(shè)置連接參數(shù),配置信息 public static $link = null;//保存連接標(biāo)識(shí)符 public static $pconnect = false;//是否開啟長連接 public static $dbVersion = null;//保存數(shù)據(jù)庫版本 public static $connected = false;//判斷是否連接成功 public static $PDOStatement = null;//保證PDOStatement對象 public static $queryStr = null;//保存最后執(zhí)行的操作 public static $error = null;//保存錯(cuò)誤信息 public static $lastInsertId = null;//保存上一步插入操作保存的AUTO_INCREMANT public static $numRows = null;//受影響記錄的條數(shù) /** * 構(gòu)造函數(shù),連接數(shù)據(jù)庫 * * @param array|string $dbConfig The database configuration * * @return boolean ( description_of_the_return_value ) */ public function __construct($dbConfig=''){ if(!class_exists("PDO")){ self::throw_exception("不支持PDO,請先開啟"); } if(!is_array($dbConfig)){ $dbConfig = array( 'hostname' => 'localhost', 'username' => 'root', 'password' => '1234', 'database' => 'test', 'hostport' => '3306', 'dbms' => 'mysql', 'dsn' => 'mysql:host=localhost;dbname=test' ); } if(empty($dbConfig['hostname'])){ self::throw_exception("沒有定義數(shù)據(jù)庫配置,請先定義"); } self::$config = $dbConfig; if(empty(self::$config['params'])){ self::$config['params'] = array(); } if(!isset(self::$link)){ $configs = self::$config; if(self::$pconnect){ //開啟長連接,添加到配置數(shù)組中 $configs['params'][constant("PDO::ATTR_PERSISTENT")] = true; } try { self::$link = new PDO($configs['dsn'],$configs['username'],$configs['password'],$configs['params']); } catch (PDOException $e) { self::throw_exception($e->getMessage()); } if(!self::$link){ self::throw_exception("PDO連接錯(cuò)誤"); return false; } self::$link->exec("set names utf8"); self::$dbVersion = self::$link->getAttribute(constant("PDO::ATTR_SERVER_VERSION")); unset($configs); } } /** * 得到所有記錄 * * @param <type> $sql The sql * * @return <type> All. */ public static function getAll($sql=null){ if($sql!=null){ self::query($sql); } $result = self::$PDOStatement->fetchAll(constant("PDO::FETCH_ASSOC")); return $result; } /** * 得到一條記錄 * * @param <type> $sql The sql * * @return <type> The row. */ public static function getRow($sql=null){ if($sql!=null){ self::query($sql); } $result = self::$PDOStatement->fetch(constant("PDO::FETCH_ASSOC")); return $result; } /** * 執(zhí)行增刪改操作,返回受影響記錄的條數(shù) * * @param <type> $sql The sql * * @return boolean ( description_of_the_return_value ) */ public static function execute($sql=null){ $link = self::$link; if(!$link)return false; if($sql!=null){ self::$queryStr = $sql; } if(!empty(self::$PDOStatement))self::free(); $result = $link->exec(self::$queryStr); self::haveErrorThrowException(); if($result){ self::$lastInsertId = $link->lastInsertId(); self::$numRows = $result; return $result; }else{ return false; } } /** * 根據(jù)主鍵查找記錄 * * @param <type> $tabName The tab name * @param <type> $priId The pri identifier * @param string $fields The fields * * @return <type> ( description_of_the_return_value ) */ public static function findById($tabName,$priId,$fields='*'){ $sql = 'SELECT %s FROM %s WHERE id=%d'; return self::getRow(sprintf($sql,self::parseFields($fields),$tabName,$priId)); } /** * 執(zhí)行普通查詢 * * @param <type> $tables The tables * @param <type> $where The where * @param string $fields The fields * @param <type> $group The group * @param <type> $having The having * @param <type> $order The order * @param <type> $limit The limit * * @return <type> ( description_of_the_return_value ) */ public static function find($tables,$where=null,$fields='*',$group=null,$having=null,$order=null,$limit =null){ $sql = 'SELECT '.self::parseFields($fields).' FROM '.$tables .self::parseWhere($where) .self::parseGroup($group) .self::parseHaving($having) .self::parseOrder($order) .self::parseLimit($limit); $data = self::getAll($sql); return $data; } /** * 添加記錄 * * @param <type> $data The data * @param <type> $table The table * * @return <type> ( description_of_the_return_value ) */ public static function add($data,$table){ $keys = array_keys($data); array_walk($keys, array('PdoMySQL','addSpecialChar')); $fieldsStr = join(',',$keys); $values = "'".join("','",array_values($data))."'"; $sql = "INSERT {$table}({$fieldsStr}) VALUES({$values})"; return self::execute($sql); } /** * 更新數(shù)據(jù) * * @param <type> $data The data * @param <type> $table The table * @param <type> $where The where * @param <type> $order The order * @param <type> $limit The limit */ public static function update($data,$table,$where=null,$order=null,$limit=null){ $sets = ''; foreach ($data as $key => $value) { $sets .= $key."='".$value."',"; } $sets = rtrim($sets,','); $sql = "UPDATE {$table} SET {$sets}".self::parseWhere($where).self::parseOrder($order).self::parseLimit($limit); echo $sql; } /** * 刪除數(shù)據(jù) * * @param <type> $data The data * @param <type> $table The table * @param <type> $where The where * @param <type> $order The order * @param <type> $limit The limit * * @return <type> ( description_of_the_return_value ) */ public static function delete($table,$where=null,$order=null,$limit=null){ $sql = "DELETE FROM {$table} ".self::parseWhere($where).self::parseOrder($order).self::parseLimit($limit); return self::execute($sql); } /** * 執(zhí)行查詢 * * @param string $sql The sql * * @return boolean ( description_of_the_return_value ) */ public static function query($sql=''){ $link = self::$link; if(!$link)return false; //判斷之前是否有結(jié)果集,如果有的話,釋放結(jié)果集 if(!empty(self::$PDOStatement))self::free(); self::$queryStr = $sql; self::$PDOStatement = $link->prepare(self::$queryStr); $res = self::$PDOStatement->execute(); self::haveErrorThrowException(); return $res; } /** * 獲取最后執(zhí)行的sql * * @return boolean The last sql. */ public static function getLastSql(){ $link = self::$link; if(!$link){ return false; } return self::$queryStr; } /** * 獲取最后插入的ID * * @return boolean The last insert identifier. */ public static function getLastInsertId(){ $link = self::$link; if(!$link){ return false; } return self::$lastInsertId; } /** * 獲得數(shù)據(jù)庫的版本 * * @return boolean The database version. */ public static function getDbVersion(){ $link = self::$link; if(!$link){ return false; } return self::$dbVersion; } /** * 得到數(shù)據(jù)庫中表 * * @return array ( description_of_the_return_value ) */ public static function showTables(){ $tables = array(); if(self::query("show tables")){ $result = self::getAll(); foreach ($result as $key => $value) { $tables[$key] = current($value); } } return $tables; } /** * 解析where條件 * * @param <type> $where The where * * @return <type> ( description_of_the_return_value ) */ public static function parseWhere($where){ $whereStr = ''; if(is_string($where)&&!empty($where)){ $whereStr = $where; } return empty($whereStr) ? '' : ' WHERE '.$whereStr; } /** * 解析group * * @param <type> $group The group * * @return <type> ( description_of_the_return_value ) */ public static function parseGroup($group){ $groupStr = ''; if(is_array($group)){ $groupStr = implode(',', $group); }elseif(is_string($group)&&!empty($group)){ $groupStr = $group; } return empty($groupStr) ? '' : ' GROUP BY '.$groupStr; } /** * 解析having * * @param <type> $having The having * * @return <type> ( description_of_the_return_value ) */ public static function parseHaving($having){ $havingStr = ''; if(is_string($having)&&!empty($having)){ $havingStr = $having; } return empty($havingStr) ? '' : ' HAVING '.$havingStr; } /** * 解析order * * @param <type> $order The order * * @return <type> ( description_of_the_return_value ) */ public static function parseOrder($order){ $orderStr = ''; if(is_string($order)&&!empty($order)){ $orderStr = $order; } return empty($orderStr) ? '' : ' ORDER BY '.$orderStr; } /** * 解析limit * * @param <type> $limit The limit * * @return <type> ( description_of_the_return_value ) */ public static function parseLimit($limit){ $limitStr = ''; if(is_array($limit)){ $limitStr = implode(',', $limit); }elseif(is_string($limit)&&!empty($limit)){ $limitStr = $limit; } return empty($limitStr) ? '' : ' LIMIT '.$limitStr; } /** * 解析字段 * * @param <type> $fields The fields * * @return string ( description_of_the_return_value ) */ public static function parseFields($fields){ if(is_array($fields)){ array_walk($fields, array('PdoMySQL','addSpecialChar')); $fieldsStr = implode(',', $fields); }elseif (is_string($fields)&&!(empty($fields))) { if(strpos($fields, '`')===false){ $fields = explode(',', $fields); array_walk($fields, array('PdoMySQL','addSpecialChar')); $fieldsStr = implode(',', $fields); }else{ $fieldsStr = $fields; } }else{ $fieldsStr = "*"; } return $fieldsStr; } /** * 通過反引號(hào)引用字字段 * * @param string $value The value * * @return string ( description_of_the_return_value ) */ public static function addSpecialChar(&$value){ if($value==="*"||strpos($value,'.')!==false||strpos($value,'`')!==false){ //不用做處理 }elseif(strpos($value, '`')===false){ $value = '`'.trim($value).'`'; } return $value; } /** * 釋放結(jié)果集 */ public static function free(){ self::$PDOStatement = null; } /** * 拋出錯(cuò)誤信息 * * @return boolean ( description_of_the_return_value ) */ public static function haveErrorThrowException(){ $obj = empty(self::$PDOStatement) ? self::$link : self::$PDOStatement; $arrError = $obj->errorInfo(); if($arrError[0]!='00000'){ self::$error = 'SQLSTATE=>'.$arrError[0].'<br/>SQL Error=>'.$arrError[2].'<br/>Error SQL=>'.self::$queryStr; self::throw_exception(self::$error); return false; } if(self::$queryStr==''){ self::throw_exception('沒有執(zhí)行SQL語句'); return false; } } /** * 自定義錯(cuò)誤處理 * * @param <type> $errMsg The error message */ public static function throw_exception($errMsg){ echo $errMsg; } /** * 銷毀連接對象,關(guān)閉數(shù)據(jù)庫 */ public static function close(){ self::$link = null; } } $pdo = new PdoMysql(); var_dump($pdo->showTables());
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP基于pdo操作數(shù)據(jù)庫技巧總結(jié)》、《php+mysqli數(shù)據(jù)庫程序設(shè)計(jì)技巧總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
PHP中集成PayPal標(biāo)準(zhǔn)支付的實(shí)現(xiàn)方法分享
前兩天一個(gè)客戶需要在網(wǎng)站上集成PayPal支付功能,查了一下資料,簡單記錄如下2012-02-02php+ajax實(shí)現(xiàn)帶進(jìn)度條的上傳圖片功能【附demo源碼下載】
這篇文章主要介紹了php+ajax實(shí)現(xiàn)帶進(jìn)度條的上傳圖片功能,涉及php文件傳輸及ajax無刷新提交的相關(guān)操作技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2016-09-09PHP getID3類的使用方法學(xué)習(xí)筆記【附getID3源碼下載】
這篇文章主要介紹了PHP getID3類的使用方法,結(jié)合實(shí)例形式分析了getID3類的原理、功能及簡單使用技巧,并附帶了getID3類的源碼供讀者下載參考,需要的朋友可以參考下2019-10-10站長助手-網(wǎng)站web在線管理程序 v1.0 下載
站長助手-網(wǎng)站web在線管理程序 v1.0 下載...2007-05-05