首頁 後端開發 php教程 parallels desktop 9 封裝一個PDO資料庫操作類別代碼

parallels desktop 9 封裝一個PDO資料庫操作類別代碼

Jul 29, 2016 am 08:40 AM

複製程式碼 程式碼如下:


/**
 * 資料庫PDO操作
 */
class MysqlPdo {
public static $PDOStatement = null;
/**
* 資料庫的連線參數配置
* @var array
* @access public
*/
public static $config = array();
/**
* 是否使用永久連線
* @var bool
* @access public
*/
public static $pconnect = false;
/**
* 錯誤訊息
* @var string
* @access public
*/
public static $error = ' ';
/**
* 單件模式,保存Pdo類別唯一實例,資料庫的連線資源
* @var object
* @access public
*/
受保護的靜態$link;
/**
* 是否已經連接資料庫
* @var bool
* @access public
*/
public static $connected = false;
/**
* 資料庫版本
* @var string
* @access public
*/
public static $dbVersion = null;
/**
* 目前SQL語句
* @var string
* @access public
*/
public static $queryStr = '';
/**
* 最後插入記錄的ID
* @var integer
* @access public
*/
public static $lastInsertId = null;
/**
* 回傳影響記錄數
* @var integer
* @access public
*/
public static $numRows = 0;
// 事務指令數
public static $transTimes = 0
/**
* 建構函數,
* @param $dbconfig 資料庫連接相關信息,array('ServerName', 'UserName', 'Password', 'DefaultDb', 'DB_Port', 'DB_TYPE')
*/
public function __construct($dbC => DB_HOST,
'使用者名稱' => DB_USER,
'密碼' => DB_PWD, 'database' => DB_NAME,
'hostport' => DB_PORT,
'dbms' => DB_TYPE,
'DB_TYPE.":host=".DB_HOST." ;dbname=".DB_NAME
);
}
if(empty($dbConfig['hostname'])) throw_exception("沒有定義資料庫設定");
self::$config = $dbConfig;
if(empty(self:: $config['params'])) self::$config['params'] = array();
/*************************************華麗分隔線************ *******************************/
if (!isset(self::$link) ) {
$configs = self::$config;
if(self::$pconnect) {
$configs['params'][constant('PDO::ATTR_PERSISTENT')] = true;
}
嘗試{
self::$link = new PDO( $configs['dsn'], $configs['用戶名'], $configs['密碼'],$configs['params ']);
} catch (PDOException $e) {
throw_exception($e->getMessage());
//exit('連線失敗:'.$e->getMessage()) ;
}
if(!self::$link) {
throw_exception('PDO 連接錯誤');
回傳錯誤;
}
self::$link-> exec('SET NAMES '.DB_CHARSET);
self::$dbVersion = self::$link->getAttribute(constant("PDO::ATTR_SERVER_INFO"));
// 標記連線成功
self::$connected = true;
// 登出資料庫連線設定資訊
unset($configs);
}
回傳self::$link;
}
/* *
* 釋放查詢結果
* @access function
*/
靜態函數free() {
self::$PDOStatement = null;
}
/************************************************** ******** ****** ************************************ ********** ************** *****/
/* 資料庫操作*/
/************************************************** **** ****** **************************************** ****** ************** *****/
/**
* 取得所有的查詢資料
* @access function
* @return array
*/
靜態函數getAll($sql=null) {
self::query($sql);
//回傳資料集
$result = self::$PDOStatement->fetchAll(constant('PDO::FETCH_ASSOC'));
傳回$結果;
}
/**
* 取得查詢結果
* @access function
* @param string $sql SQL指令
* @param integer $seek 指標位置
* @return array
*/
靜態函數getRow($sql=null) {
self::query($sql);
// 傳回資料庫集
$result = self::$PDOStatement->fetch (constant('PDO::FETCH_ASSOC'),constant('PDO::FETCH_ORI_NEXT'));
傳回$結果;
}
/**
* 執行sql語句,自動判斷進行查詢或執行操作
* @access function
* @param string $sql SQL指令
* @return mixed
*/
靜態函數doSql ($sql='') {
if(self::isMainIps($sql)) {
回傳self: :執行($sql);
}else {
回傳self::getAll ($sql);
}
}
/**
* 根據指定ID查找表中記錄(僅用於單表操作)
* @access function
* @param integer $priId 主鍵ID
* @param string $tables 資料表名
* @param string $fields 欄位名稱
* @return ArrayObject 表記錄
*/
靜態函數findById($tabName,$priId,$fields='*'){
$sql = 'SELECT %s來自%s,其中id=%d';
回傳self::getRow(sprintf($sql, self::parseFields($fields), $tabName, $priId));
}
/**
* 尋找記錄
* @access function
* @param string $tables 資料表名
* @param mixed $where 查詢條件
* @param string $fields 欄位名稱
* @param string $order 排序
* @param string $limit 取多少條資料
* @param string $group 分組
* @param string $having
* @param boolean $lock 是否加鎖
* @return ArrayObject
*/
靜態函數find($tables,$where="",$fields='*',$order=null,$limit=null,$group=null,$ having=null) {
$sql = 'SELECT '.self::parseFields($fields)
.' FROM '.$tables
.self::parseWhere($where)
.self ::parseGroup($group)
.self::parseHaving($having)
.self::parseOrder( $order)
.self::parseLimit($limit);
$dataAll = self::getAll($sql);
if(count($dataAll)==1){$rlt=$dataAll[0];}else{$rlt=$dataAll;}
return $rlt;
}
/**
* 插入(單一)記錄
* @access function
* @param mixed $data 資料
* @param string $table 資料表名
* @return false | integer
*/
static function add($data,$table) {
//過濾提交資料
$data=self::filterPost($table ,$資料);
foreach ($data as $key=>$val){
if(is_array($val) && strtolower($val[0]) == 'exp') {
$val = $值[1]; // 使用表達式???
}elseif (is_scalar($val)){
$val = self::fieldFormat($val);
}else {
//刪除複合物件
繼續;
}
$data[$key] = $val;
}
$fields = array_keys($data);
array_walk($fields, array($this, 'addSpecialChar'));
$fieldsStr = implode(',', $fields);
$values = array_values($data);
$valuesStr =$valuesStr = implode(',', $values);
$sql = '插入'.$table.' ('.$fieldsStr.') VALUES ('.$valuesStr.')';
回傳self:: execute($sql);
}
/**
* 更新記錄
* @access function
* @param mixed $sets 資料
* @param string $table 資料表名
* @param string $where 更新條件
* @param string $limit
* @param string $order
* @return false | integer
*/
靜態函數update($sets,$table,$where,$limit=0,$order='') {
$sets = self ::filterPost($table,$sets);
$sql = '更新'.$table.' SET '.self::parseSets($sets).self::parseWhere($where ).self::parseOrder($order).self::parseLimit($limit);
回傳self::execute($sql);
}
/**
* 儲存某個欄位的值
* @access function
* @param string $field 要儲存的欄位名稱
* @param string $value 欄位值
* @param string $ table 資料表
* @param string $where 儲存條件
* @param boolean $asString 欄位值是否為字串
* @return void
*/
static function setField($field, $value, $table, $c $asString=false) {
// 如果有'(' 視為SQL 指令更新否則更新欄位內容為純字串
if( false === strpos($value,'(') || $asString) $value = '"'.$value.'"';
$sql = 'UPDATE '.$table.' SET '.$ field.'='.$value.self::parseWhere($condition);
回傳self::execute($sql); >}
/**
* 刪除記錄
* @access function
* @param mixed $where 為條件Map、Array或String
* @param string $table 資料表名
* @param string $limit
* @param string $order
* @return false | integer
*/
靜態函式刪除($where,$table,$limit='',$order='') {
$sql = 'DELETE FROM '. $table.self::parseWhere($where).self::parseOrder($order ).self::parseLimit($limit);
回傳self::execute($sql)
}
/**
+---------------------------------------------- ------------
* 修改或儲存資料(僅用於單表操作)
* 有主鍵ID則為修改,無主鍵ID則為增加
* 修改記錄:
+-------------------------------------------- --------------
* @access function
+------------------------- ---------------------------------
* @param $tabName 表名
* @param $ aPost 提交表單的$_POST
* @param $priId 主鍵ID
* @param $aNot 要排除的一個字段或數組
* @param $aCustom 自訂的數組,附加到資料庫中保存
* @param $isExits 是否已經存在存在:true, 不存在:false
+--------------------------- -------------------------------
* @return Boolean 修改或保存是否成功
+--- -------------------------------------------------- -----
*/
靜態函式saveOrUpdate($tabName, $aPostost , $priId="", $aNot="", $aCustom="", $isExits=false) {
if(空白($tabName) || !is_array($aPost) || is_int($aNot) ) 回傳false; ;
if(is_array($aNot) && is_int(key($aNot))) $aPost = array_diff_key($aPost, array_flip($aNot));
if(is_array($aCustom) && is_string(key) ($aCustom))) $aPost = array_merge($aPost,$aCustom)
if (empty($priId) && !$isExits) { // 新增
$aPost = array_filter( $aPost, array ($this, 'removeEmpty'));
回傳self::add($aPost, $tabName);
} else { //修改
return self::update($aPost , $tabName, "id=".$priId);
}
}
/**
* 取得最近一次查詢的sql語句
* @access function
* @param
* @return String 執行的SQL
*/
靜態函數getLastSql() {
$link = self::$link;
if (!$link) 回傳false;
回傳self: :$queryStr;
}
/**
* 取得最後插入的ID
* @access function
* @param
* @return integer 最後插入時的資料ID
*/
靜態函數getLastInsId(){
$link = self::$link;
if (!$link) 回傳false;
回傳self::$lastInsertId;
}
/**
* 取得DB版本
* @access function
* @param
* @return string
*/
靜態函數getDbVersion(){
$link = self::$link;
if ( !$link ) 回傳false;
回傳self::$dbVersion;
}
/**
* 取得資料庫的表格資訊
* @access function
* @return array
*/
靜態函數getTables() {
$info = array();
if(self::query("顯示表格")) {
$result = self::getAll();
foreach ($result as $key => $val) {
$info[$key] = current($val);
}
}
回傳$info;
}
/**
* 取得資料表的欄位資訊
* @access function
* @return array
*/
static function getFields($tableName) {
//取得資料庫連線
$link = self::$link;
$sql = "選擇
ORDINAL_POSITION ,COLUMN_NAME, COLUMN_TYPE, DATA_TYPE, COLUMN_DEFAULT, ,COLUMN_KEY,額外, COLUEMAMN_MENT TABLE_NAME = :tabName AND TABLE_SCHEMA='".DB_NAME."'";
self::$queryStr = sprintf($sql, $tableName);
$sth = $link->prepare($sql);
$sth ->bindParam(':tabName', $tableName);
$sth->execute();
$result = $sth->fetchAll(constant('PDO::FETCH_ASSOC'));
$info = array();
foreach ($result as $key => $val) {
$info[$val['COLUMN_NAME']] = array(
'postion' => $val ['ORDINAL_POSITION'] ,
'name' => $val['COLUMN_NAME'],
'type' => $val['COLUMN_TYPE'],
'd_type' => $val[' DATA_TYPE' ],
'length' => $val['MAXCHAR'],
'notnull' => (strtolower($val['IS_NULLABLE']) == "no"),
'預設' => $val['COLUMN_DEFAULT'],
'primary' => (strtolower($val['COLUMN_KEY']) == 'pri'),
'autoInc' => ( strtolower($ val['EXTRA']) == 'auto_increment'),
'comment' => $val['COLUMN_COMMENT']
);
}
// 有錯誤則發送異常
self::haveErrorThrowException();
回傳$訊息;
}
/**
* 關閉資料庫
* @access function
*/
靜態函式close() {
self::$link = null;
}
/**
* SQL指令安全過濾
* @access function
* @param string $str SQL指令
* @return string
*/
靜態函數escape_string($str) {
return addslashes($str);
}
/************************************************** **** **** ****************************************** ******** ****** ***** /
/* 內部操作方法*/
/************************************************** ******** ********************************************** ************ ****** *****/
/**
* 有錯誤拋出例外
* @access function
* @return
*/
靜態函數hasErrorThrowException() {
$obj = 空( self::$PDOStatement) ? self::$link : self::$PDOStatement;
$arrError = $obj->errorInfo();
if(count($arrError) > 1) { // 有錯誤訊息
//$this->rollback();
self::$error = $arrError[2]。 "

> [ SQL 語句] : ".self::$queryStr;
//拋出例外($this->error);
拋出例外(self::$ error);
傳回錯誤;
}
//主要針對execute()方法傳送例外狀況
if(self::$queryStr=='')throw_exception('查詢為空

; [ SQL 語句] :');
}
/**
* where分析
* @access function
* @param mixed $where 查詢條件
* @return string
*/
靜態函數parseWhere($where) {
$whereStr = '';
if(is_string($where) || is_null($where)) {
$whereStr = $where;
}
回空($whereStr)?'':' WHERE '.$whereStr '.$whereStr ;
}
/**
* order分析
* @access function
* @param mixed $order 排序
* @return string
*/
靜態函數parseOrder($order) {
$orderStr = '';
if(is_array($order))
$orderStr .= ' ORDER BY '.implode(',', $order);
else if(is_string($order) && !empty($order))
$orderStr .= ' ORDER BY '. $order;
回傳$orderStr;
}
/**
* 限制分析
* @access 函數
* @param string $limit
* @return string
*/
靜態函數parseLimit($limit) {
$limitStr = '';
if( is_array($limit)) {
if(count($limit)>1)
$limitStr .= ' LIMIT '.$limit[0].' , '.$limit[1].' ';
else
$limitStr .= ' LIMIT '.$limit[0].' ';
} else if(is_string($limit) && !empty($limit)) {
$limitStrStr .= ' LIMIT '.$limit.' ';
}
回傳$limitStr;
}
/**
* 分組分析
* @access 函數
* @param mix $group
* @return string
*/
靜態函數parseGroup($group) {
$groupStr = '';
if(is_array($group))
$groupStr .= ' GROUP BY '.implode(',', $group);
else if(is_string($group) && !empty($group))
$groupStr .= ' GROUP BY '.$group;
返回空($groupStr)?'':$groupStr;
}
/**
*having 分析
* @access 函數
* @param string $having
* @return string
*/
靜態函數 parseHaving($having) {
$havingStr = '';
if(is_string($having) && !empty($having))
$havingStr .= ' HAVING '.$having;
回傳$havingStr;
}
/**
* 欄位分析
* @access 函數
* @param mix $fields
* @return string
*/
靜態函數parseFields($fields) {
if(is_array($fields)) {
array_walk( $fields, array($this) , 'addSpecialChar'));
$fieldsStr = implode(',', $fields);
}else if(is_string($fields) && !empty($fields)) {
if( false === strpos($fields,'`') ) {
$fields =explode(' ,',$字段);
array_walk($fields, array($this, 'addSpecialChar'));
$fieldsStr = implode(',', $fields);
}else {
$fieldsStr = $fields;
}
} 否則 $fieldsStr = '*';
返回$fieldsStr;
}
/**
* sets分析,更新資料時呼叫
* @access function
* @param mixed $values
* @return string
*/
內部函數 parseSets($sets) {
$setsStr = '';
if(is_array($sets)){
foreach ($sets as $key=>$val){
$key = self::addSpecialChar($key);
$val = self::fieldFormat($val);
$setsStr .= "$key = ".$val.",";
}
$setsStr = substr($setsStr,0,-1);
}else if(is_string($sets)) {
$setsStr = $sets;
}
回傳 $setsStr;
}
/**
* 欄位格式化
* @access function
* @param mixed $value
* @return mixed
*/
靜態函數 fieldFormat(&$value) {
if(is_int($value)) {
$value = intval($value) ;
} else if(is_float($value)) {
$value = floatval($value);
} elseif(preg_match('/^(w*(+|-|*|/)?w*)$/i',$value)){
// 支援在欄位的值裡面直接使用其它欄位
// 例如(score+1) (name) 必須包含括號
$value = $value;
}else if(is_string($value)) {
$value = '''.self::escape_string($value).''';
}
回傳$值;
}
/**
* 欄位與表名新增` 符合
* 保證指令中使用關鍵字不出錯針對mysql
* @access function
* @param mixed $value
* @return mixed
*/
靜態函數 addSpecialChar(&$value) {
if( '*' == $value || false !== strpos($value, '(') || false !== strpos($value,'.') || false !== strpos($value,'`')) {
//如果包含*或使用了sql方法則不處理
} elseif(false === strpos($value,'`') ) {
$value = '`'.trim($value). '`';
}
回傳$value
/**
+---------------------------------------------- ------------
* 去掉空元素
+--------------------------- -------------------------------
* @access function
+-------- --------------------------------------------------
* @param mixed $value
+------------------------------------- ---------------------
* @return mixed
+------------------ ----------------------------------------
*/
靜態函數removeEmpty($value){
return !empty($value)
}
/* *
* 執行查詢 主要針對 SELECT, SHOW 等指令
* @access function
* @param string $sql sql指令
* @return mixed
*/
靜態函數query($sql='') {
//取得資料庫連線
$link = self::$link;
if; ( !$link ) return false;
self::$queryStr = $sql; //釋放前次的查詢結果
if ( !empty(self::$PDOStatement) ) self::free(); self::$PDOStatement = $link->prepare(self::$queryStr);
$bol = self::$PDOStatement->execute();
// 有錯誤則發送例外狀況
self ::haveErrorThrowException();
回傳$bol
}
/**
* 資料庫操作方法
* @access function
* @param string $sql 執行語句
* @param boolean $lock 是否鎖定(預設不鎖定)
* @return void
public function execute($sql='',$lock=false) {
if(empty($sql)) $sql = $this->queryStr;
return $this->_execute($sql) ;
}*/
/**
* 執行語句 針對 INSERT, UPDATE 以及DELETE
* @access function
* @param string $sql sql指令
* @return integer
*/
靜態函式執行($ sql='' ) {
// 取得資料庫連線
$link = self::$link;
if ( !$link ) return false
self::$queryStr = $sql
//釋放前次的查詢結果
if ( !empty(self::$PDOStatement) ) self::free();
$result = $link->exec(self::$queryStr)
//有錯誤則發送異常
self::haveErrorThrowException();
if ( false === $result) {
回傳 false;
} else {
self::$numRows = $結果;
self::$lastInsertId = $link->lastInsertId();
返回自我::$numRows;
}
}
/**
* 是否為資料庫更改操作
* @access private
* @param string $query SQL指令
* @return boolen 如果是查詢操作回傳false
*/
靜態函數isMainIps($query) {
$queryIps = 'INSERT|UPDATE|DELETE|REPLACE|CREATE|DROP|LOAD DATA|SELECT .* INTO|COPY |更改|授予|撤銷|鎖定|解鎖';
if (preg_match('/^s*"?(' . $queryIps . ')s+/i', $query)) {
回傳true;
}
回傳false;
}
/**
* 過濾POST提交資料
* @access private
* @param mixed $data POST提交資料
* @param string $table 資料表名
* @return mixed $newdata
* @return mixed $newdata
*/
靜態函數filterPost($table,$data) {
$table_column = self::getFields( $table);
$newdata=array( );
foreach ($table_column as $key=>$val){
if(array_key_exists($key,$data) && ($data[$key ])!==''){
$newdata[$key] = $data[$key];
}
}
回傳$newdata;
}
/* *
* 啟動交易
* @access function
* @return void
*/
靜態函數startTrans() {
//資料回滾支援
$link = self::$link;
if (!$link ) return false
if (self::$transTimes == 0) {
$link->beginTransaction()
}
self::$transTimes++;
return ;
/**
* 用於非自動提交狀態下面的查詢提交
* @access function
* @return boolen
* /
靜態function commit() {
$link = self::$link
if (!$link ) return false;
if (self::$transTimes > 0) {
$result; $link->commit();
self::$transTimes = 0;
if(!$result){
拋出例外(self::$error());
}
}
回傳true
}
/**
* 交易回滾
* @access function
* @return boolen
*/
public function rollback() {
$link = self::$link;
if ( !$link ) 回傳false;
if (self::$transTimes > 0) {
$result = $link->rollback();
self::$transTimes = 0;
if(!$result){
throw_exception(self::$error());
回傳錯誤;
}
}
回傳true;
}
}
}
? >

以上就介紹了parallelsdesktop 9封裝一個希望的PDO資料庫操作程式碼,包含了parallelsdesktop9的內容,對PHP教學有興趣的朋友有幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

php中的捲曲:如何在REST API中使用PHP捲曲擴展 php中的捲曲:如何在REST API中使用PHP捲曲擴展 Mar 14, 2025 am 11:42 AM

PHP客戶端URL(curl)擴展是開發人員的強大工具,可以與遠程服務器和REST API無縫交互。通過利用Libcurl(備受尊敬的多協議文件傳輸庫),PHP curl促進了有效的執行

解釋PHP中晚期靜態結合的概念。 解釋PHP中晚期靜態結合的概念。 Mar 21, 2025 pm 01:33 PM

文章討論了PHP 5.3中介紹的PHP中的晚期靜態結合(LSB),允許靜態方法的運行時間分辨率調用以更靈活的繼承。 LSB的實用應用和潛在的觸摸

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

框架安全功能:防止漏洞。 框架安全功能:防止漏洞。 Mar 28, 2025 pm 05:11 PM

文章討論了框架中的基本安全功能,以防止漏洞,包括輸入驗證,身份驗證和常規更新。

如何用PHP的cURL庫發送包含JSON數據的POST請求? 如何用PHP的cURL庫發送包含JSON數據的POST請求? Apr 01, 2025 pm 03:12 PM

使用PHP的cURL庫發送JSON數據在PHP開發中,經常需要與外部API進行交互,其中一種常見的方式是使用cURL庫發送POST�...

自定義/擴展框架:如何添加自定義功能。 自定義/擴展框架:如何添加自定義功能。 Mar 28, 2025 pm 05:12 PM

本文討論了將自定義功能添加到框架上,專注於理解體系結構,識別擴展點以及集成和調試的最佳實踐。

ReactPHP的非阻塞特性究竟是什麼?如何處理其阻塞I/O操作? ReactPHP的非阻塞特性究竟是什麼?如何處理其阻塞I/O操作? Apr 01, 2025 pm 03:09 PM

深入解讀ReactPHP的非阻塞特性ReactPHP的一段官方介紹引起了不少開發者的疑問:“ReactPHPisnon-blockingbydefault....

See all articles