亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

php中PDO方式實現數據庫的增刪改查

2024-05-04 23:35:18
字體:
來源:轉載
供稿:網友

PDO是mysql數據庫操作的一個公用類了,我們不需要進行自定類就可以直接使用pdo來操作數據庫了,但是在php默認配置中pdo是未開啟所以我們必須先在php.ini中開啟它才可以使用。

需要開啟php的pdo支持,php5.1以上版本支持

實現數據庫連接單例化,有三要素 靜態變量、靜態實例化方法、私有構造函數 DPDO.php

 

 
  1. class DPDO{ 
  2. private $DSN
  3. private $DBUser
  4. private $DBPwd
  5. private $longLink
  6. private $pdo
  7. //私有構造函數 防止被直接實例化 
  8. private function __construct($dsn$DBUser$DBPwd$longLink = false) { 
  9. $this->DSN = $dsn
  10. $this->DBUser = $DBUser
  11. $this->DBPwd = $DBPwd
  12. $this->longLink = $longLink
  13. $this->connect(); 
  14. //私有 空克隆函數 防止被克隆 
  15. private function __clone(){} 
  16. //靜態 實例化函數 返回一個pdo對象 
  17. static public function instance($dsn$DBUser$DBPwd$longLink = false){ 
  18. static $singleton = array();//靜態函數 用于存儲實例化對象 
  19. $singIndex = md5($dsn . $DBUser . $DBPwd . $longLink); 
  20. if (emptyempty($singleton[$singIndex])) { 
  21. $singleton[$singIndex] = new self($dsn$DBUser$DBPwd$longLink = false); 
  22. return $singleton[$singIndex]->pdo; 
  23.  
  24. private function connect(){ 
  25. try{ 
  26. if($this->longLink){ 
  27. $this->pdo = new PDO($this->DSN, $this->DBUser, $this->DBPwd, array(PDO::ATTR_PERSISTENT => true)); 
  28. }else
  29. $this->pdo = new PDO($this->DSN, $this->DBUser, $this->DBPwd); 
  30. $this->pdo->query('SET NAMES UTF-8'); 
  31. } catch(PDOException $e) { 
  32. die('Error:' . $e->getMessage() . '<br/>'); 

用于處理字段映射,使用pdo的字段映射,可以有效避免sql注入

 

 
  1. //字段關聯數組處理, 主要用于寫入和更新數據、同and 或 or 的查詢條件,產生sql語句和映射字段的數組 
  2. public function FDFields($data$link = ','$judge = array(), $aliasTable = ''){ 
  3. $sql = ''
  4. $mapData = array(); 
  5. foreach($data as $key => $value) { 
  6. $mapIndex = ':' . ($link != ',' ? 'c' : '') . $aliasTable . $key
  7. $sql .= ' ' . ($aliasTable ? $aliasTable . '.' : '') . '`' . $key . '` ' . ($judge[$key] ? $judge[$key] : '=') . ' ' . $mapIndex . ' ' . $link
  8. $mapData[$mapIndex] = $value
  9. $sql = trim($sql$link); 
  10. return array($sql$mapData); 
  11. //用于處理單個字段處理 
  12. public function FDField($field$value$judge = '='$preMap = 'cn'$aliasTable = '') { 
  13. $mapIndex = ':' . $preMap . $aliasTable . $field
  14. $sql = ' ' . ($aliasTable ? $aliasTable . '.' : '') . '`' . $field . '`' . $judge . $mapIndex
  15. $mapData[$mapIndex] = $value
  16. return array($sql$mapData); 
  17. //使用剛方法可以便捷產生查詢條件及對應數據數組 
  18. public function FDCondition($condition$mapData) { 
  19. if(is_string($condition)) { 
  20. $where = $condition
  21. else if (is_array($condition)) { 
  22. if($condition['str']) { 
  23. if (is_string($condition['str'])) { 
  24. $where = $condition['str']; 
  25. else { 
  26. return false; 
  27. if(is_array($condition['data'])) { 
  28. $link = $condition['link'] ? $condition['link'] : 'and'
  29. list($conSql$mapConData) = $this->FDFields($condition['data'], $link$condition['judge']); 
  30. if ($conSql) { 
  31. $where .= ($where ? ' ' . $link : '') . $conSql
  32. $mapData = array_merge($mapData$mapConData); 
  33. return array($where$mapData); 

增刪改查的具體實現DB.php

 

 
  1. public function fetch($sql$searchData = array(), $dataMode = PDO::FETCH_ASSOC, $preType = array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)) { 
  2. if ($sql) { 
  3. $sql .= ' limit 1'
  4. $pdoStatement = $this->pdo->prepare($sql$preType); 
  5. $pdoStatement->execute($searchData); 
  6. return $data = $pdoStatement->fetch($dataMode); 
  7. else { 
  8. return false; 
  9.  
  10. public function fetchAll($sql$searchData = array(), $limit = array(0, 10), $dataMode = PDO::FETCH_ASSOC, $preType = array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)) { 
  11. if ($sql) { 
  12. $sql .= ' limit ' . (int) $limit[0] . ',' . (intval($limit[1]) > 0 ? intval($limit[1]) : 10); 
  13. $pdoStatement = $this->pdo->prepare($sql$preType); 
  14. $pdoStatement->execute($searchData); 
  15. return $data = $pdoStatement->fetchAll($dataMode); 
  16. else { 
  17. return false; 
  18.  
  19. public function insert($tableName$data$returnInsertId = false, $replace = false) { 
  20. if(!emptyempty($tableName) && count($data) > 0){ 
  21. $sql = $replace ? 'REPLACE INTO ' : 'INSERT INTO '
  22. list($setSql$mapData) = $this->FDFields($data); 
  23. $sql .= $tableName . ' set ' . $setSql
  24. $pdoStatement = $this->pdo->prepare($sqlarray(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); 
  25. $execRet = $pdoStatement->execute($mapData); 
  26. return $execRet ? ($returnInsertId ? $this->pdo->lastInsertId() : $execRet) : false; 
  27. else { 
  28. return false; 
  29.  
  30. public function update($tableName$data$condition$mapData = array(), $returnRowCount = true) { 
  31. if(!emptyempty($tableName) && count($data) > 0) { 
  32. $sql = 'UPDATE ' . $tableName . ' SET '
  33. list($setSql$mapSetData) = $this->FDFields($data); 
  34. $sql .= $setSql
  35. $mapData = array_merge($mapData$mapSetData); 
  36. list($where$mapData) = $this->FDCondition($condition$mapData); 
  37. $sql .= $where ? ' WHERE ' . $where : ''
  38. $pdoStatement = $this->pdo->prepare($sqlarray(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); 
  39. $execRet = $pdoStatement->execute($mapData); 
  40. return $execRet ? ($returnRowCount ? $pdoStatement->rowCount() : $execRet) : false; 
  41. else { 
  42. return false; 
  43.  
  44. public function delete($tableName$condition$mapData = array()) { 
  45. if(!emptyempty($tableName) && $condition){ 
  46. $sql = 'DELETE FROM ' . $tableName
  47. list($where$mapData) = $this->FDCondition($condition$mapData); 
  48. $sql .= $where ? ' WHERE ' . $where : ''
  49. $pdoStatement = $this->pdo->prepare($sqlarray(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); 
  50. $execRet = $pdoStatement->execute($mapData); 
  51. return $execRet

測試文件test.php

 

 
  1. header("Content-type: text/html; charset=utf-8"); 
  2. define('APP_DIR', dirname(__FILE__)); 
  3.  
  4. if (function_exists('spl_autoload_register')) { 
  5. spl_autoload_register('autoClass'); 
  6. else { 
  7. function __auto_load($className){ 
  8. autoClass($className); 
  9.  
  10. function autoClass($className){ 
  11. try{ 
  12. require_once APP_DIR.'/class/'.$className.'.php'
  13. } catch (Exception $e) { 
  14. die('Error:' . $e->getMessage() . '<br />'); 
  15. $DB = new DB(); 
  16. //插入 
  17. $inData['a'] = rand(1, 100); 
  18. $inData['b'] = rand(1, 1000); 
  19. $inData['c'] = rand(1,200) . '.' . rand(1,100); 
  20. $ret = $DB->insert('a'$inData); 
  21. echo '插入' . ($ret ? '成功' : '失敗') . '<br/>'
  22. //更新 
  23. $upConData['a'] = 100; 
  24. $upConJudge['a'] = '<'
  25. $upConData['b'] = 30; 
  26. $upConJudge['b'] = '>'
  27. list($upConStr$mapUpConData) = $DB->FDField('b', 200, '<''gt'); 
  28. $condition = array
  29. 'str' => $upConStr
  30. 'data' => $upConData
  31. 'judge' => $upConJudge
  32. 'link' => 'and' 
  33. ); 
  34. $upData['a'] = rand(1, 10); 
  35. $upData['b'] = 1; 
  36. $upData['c'] = 1.00; 
  37. $changeRows = $DB->update('a'$upData$condition$mapUpConData); 
  38. echo '更新行數:' . (int) $changeRows . '<br/>'
  39. //刪除 
  40. $delVal = rand(1, 10); 
  41. list($delCon$mapDelCon) = $DB->FDField('a'$delVal); 
  42. $delRet = $DB->delete('a'$delCon$mapDelCon); 
  43. echo '刪除a=' . $delVal . ($delRet ? '成功' : '失敗') . '<br/>'
  44.  
  45. //查詢 
  46. $data['a'] = '10'
  47. $judge['a'] = '>'
  48. $data['b'] = '400'
  49. $judge['b'] = '<'
  50. list($conSql$mapConData) = $DB->FDFields($data'and'$judge); 
  51. $mData = $DB->fetch('select * from a where ' . $conSql . ' order by `a` desc'$mapConData); 
  52.  
  53. var_dump($mData); 

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩视频第一页| 日本中文字幕不卡免费| 成人网址在线观看| 亚洲四色影视在线观看| 欧美成人免费一级人片100| 日韩在线中文字| 欧美性xxxx极品高清hd直播| 国产91精品最新在线播放| 亚洲精品资源美女情侣酒店| 欧美午夜精品在线| 国产91免费看片| 欧美日韩亚洲精品内裤| 精品日韩视频在线观看| 91欧美视频网站| 亚洲免费视频观看| 国产在线观看精品一区二区三区| 91伊人影院在线播放| 俺去啦;欧美日韩| 国产欧美va欧美va香蕉在线| 在线观看欧美日韩国产| 久久精品视频导航| 久久久国产一区二区| 毛片精品免费在线观看| 最近中文字幕日韩精品| 国产人妖伪娘一区91| 97精品欧美一区二区三区| 国产综合久久久久久| 久久欧美在线电影| 国产精品一香蕉国产线看观看| 中文字幕一区二区精品| 97久久久免费福利网址| 91亚洲精品久久久| 国产一区二区三区免费视频| 亚洲国产精品va在线| 国产视频福利一区| 欧美激情按摩在线| 国产精品av网站| 久久天天躁夜夜躁狠狠躁2022| 激情久久av一区av二区av三区| 成人激情视频小说免费下载| 亚洲国产精品va在看黑人| 亚洲欧美一区二区精品久久久| 亚洲美女视频网| 97香蕉久久夜色精品国产| 日韩在线国产精品| 欧美一区二区三区精品电影| 欧美精品福利视频| 午夜欧美大片免费观看| 91免费看片在线| 中文字幕自拍vr一区二区三区| 国产综合久久久久久| 日本亚洲欧美成人| 日本视频久久久| 亚洲国产成人久久| 怡红院精品视频| 欧美在线中文字幕| 91中文精品字幕在线视频| 日本久久久a级免费| 国产一区私人高清影院| 欧美午夜女人视频在线| 亚洲免费福利视频| 国产精品久久久91| 成人性生交大片免费观看嘿嘿视频| 在线看日韩av| 成人午夜两性视频| 九九九久久国产免费| 日韩高清av一区二区三区| 亚洲一区二区中文| 日韩最新中文字幕电影免费看| 亚洲aⅴ日韩av电影在线观看| 最近2019年日本中文免费字幕| 亚洲影院色无极综合| 亚洲精品中文字| 久久影院在线观看| 久久五月天综合| 欧美精品在线免费播放| 亚洲一区二区精品| 91精品视频在线播放| 国产男女猛烈无遮挡91| 亚洲精品日韩在线| 亚洲a一级视频| 亚洲综合色av| 欧美大片va欧美在线播放| 亚洲国产91精品在线观看| 一本色道久久88综合日韩精品| 91精品国产免费久久久久久| 国产精品久久久久久亚洲影视| 国产美女被下药99| 国产美女高潮久久白浆| 国产精品久久久久久久久久久久| 国产精品电影网站| 欧美日韩亚洲国产一区| 亚洲欧洲自拍偷拍| 精品免费在线观看| 91视频国产精品| 国产一区二区黄| 国产成人avxxxxx在线看| 国产精品国产福利国产秒拍| 国产精品∨欧美精品v日韩精品| 欧美电影免费观看网站| 亚洲天堂网站在线观看视频| 亚洲自拍中文字幕| 97视频在线播放| 在线看国产精品| 亚洲精品www| 国色天香2019中文字幕在线观看| 97视频免费在线观看| 国产xxx69麻豆国语对白| 国产精品视频不卡| 不卡av在线网站| 国产日韩在线看片| 日韩精品免费在线观看| 亚洲激情久久久| 欧美性视频精品| 91精品国产自产91精品| 伊人一区二区三区久久精品| 国产午夜精品全部视频播放| 日韩在线免费av| 亚洲aⅴ男人的天堂在线观看| 欧美性xxxx极品hd欧美风情| 成人午夜激情免费视频| 国产精品麻豆va在线播放| 最近中文字幕2019免费| 国产精品久久久久77777| 国产精品美女免费看| 国产精品三级网站| 国产成人亚洲精品| 久久亚洲影音av资源网| 国产日韩欧美在线视频观看| 中文字幕亚洲字幕| 51色欧美片视频在线观看| 国产成人精品电影久久久| 91九色蝌蚪国产| 国产成人精彩在线视频九色| 日韩欧美有码在线| 亚洲高清久久网| 久久韩国免费视频| 欧美日韩国产一区在线| 成人福利在线视频| 日韩中文av在线| 中文字幕在线精品| 中文欧美日本在线资源| 日本亚洲欧美成人| 欧美专区在线视频| 久久这里有精品| 国产精品视频播放| 亚洲天堂网在线观看| 精品无人区太爽高潮在线播放| 精品高清一区二区三区| 色av吧综合网| 北条麻妃一区二区三区中文字幕| 欧美激情第一页xxx| 国产精品va在线播放我和闺蜜| 欧美在线观看网站| 亚洲在线视频观看| 亚洲欧美激情视频| 成人a视频在线观看| 欧美日韩中文字幕日韩欧美| 国产欧美日韩精品在线观看| 亚洲a级在线观看| 久久夜色精品国产欧美乱| 欧美精品videosex牲欧美| 26uuu日韩精品一区二区| xxxxx成人.com|