国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 後端開發(fā) php教程 PHP PDO操作MYSQL封裝類

PHP PDO操作MYSQL封裝類

Jul 25, 2016 am 08:42 AM

  1. /**
  2. * auther soulence
  3. * 呼叫資料類別檔案
  4. * modify 2015/06/12
  5. */
  6. class DBConnect
  7. {
  8. private $dbname = null;
  9. private $dodbdo = null;
  10. private $persistent = false;
  11. private $statement = null;
  12. private $lastInsID = null;
  13. private static $_instance = [];
  14. private static $_instance = [];
  15. {
  16. $this->dbname = $dbname;
  17. $this->persistent = $attr;
  18. }
  19. 公共靜態(tài)函數(shù)db ($flag='r',$persistent=false)
  20. {
  21. if(!isset($flag)){
  22. $flag = 'r';
  23. }
  24. if (!class_exists('PDO'))
  25. {
  26. throw new Exception('找不到PDO');
  27. return false;
  28. }
  29. $mysql_server = Yaf_Registry::get('mysql');
  30. if(!isset($mysql_server[$flag])){
  31. return false;
  32. }
  33. $options_arr = array(PDO::MYSQL_ATTR_INIT_COMMAND => '設(shè)定名稱'.$mysql_server[$flag]['charset'],PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC); if(Ypersed $ === true){
  34. $options_arr[PDO::ATTR_PERSISTENT] = true;
  35. }
  36. 嘗試{
  37. $pdo = new PDO($mysql_server[$flag][ '??> $pdo = new PDO($mysql_server_server '],$mysql_server[$flag]['使用者名稱'],$mysql_server[$flag]['password'],$options_arr);
  38. } catch (PDOException $e) {
  39. 引發(fā)新例外( $e->getMessage());
  40. //exit('連線失敗:'.$e->getMessage());
  41. 回傳 false;
  42. }
  43. if(!$pdo) {
  44. throw new Exception('PDO CONNECT ERROR');
  45. 回傳 false;
  46. }
  47. return $pdo;
  48. }
  49. /**
  50. * 得到操作資料庫物件
  51. * @param string $dbname 對應(yīng)的資料庫是誰
  52. * @param bool $attr 是否長連接
  53. * return false說明給定的資料庫不存在
  54. */
  55. public static function getgetstance($dbname = ' r',$attr = false)
  56. {
  57. $mysql_server = Yaf_Registry::get('mysql');
  58. if(!isset($mysql_server[$dbname])){
  59. return false ;
  60. }
  61. $key = md5(md5($dbname.$attr,true));
  62. if (!isset(self::$_instance[$key]) || !is_object(self: :$_instance[$key] ]))
  63. self::$_instance[$key] = new self($dbname,$attr);
  64. return self::$_instance[$key];
  65. }
  66. 私有函數(shù)getConnect(){
  67. $this->pdo = self::db($this->dbname,$this->persistent);
  68. }
  69. /**
  70. * 查詢操作
  71. * @param string $sql 執(zhí)行查詢的sql語句
  72. * @param array $data 查詢的條件格式為[':id'=>$id,':name'=> $name](推薦)或為[1=>$id,2=>$name]
  73. * @param bool $one 是否回傳一條內(nèi)容預(yù)設(shè)為否
  74. */
  75. 公用函數(shù)查詢($sql, $data = [], $one = false)
  76. {
  77. if (!is_array($data) ||empty($sql ) || ! is_string($sql))
  78. 回傳false;
  79. $this->free();
  80. return $this->queryCommon($data,$sql,$ one) ;
  81. }
  82. /**
  83. * 內(nèi)部查詢的共用方法
  84. */
  85. 乾燥函數(shù)queryCommon($data,$sql,$one)
  86. {
  87. $this->pdoExec( $ data,$sql);
  88. if ($one){
  89. return $this->statement->fetch(PDO::FETCH_ASSOC);
  90. }else{
  91. return $this ->statement->fetchAll(PDO::FETCH_ASSOC);
  92. }
  93. }
  94. /**
  95. * 多條SQL語句的查詢操作
  96. * @param array $arr_sql 執(zhí)行查詢的sql語句數(shù)組格式為[$sql1,$sql2]
  97. * @param array $arr_data 查詢與$arr_sql對應(yīng)的條件格式為[[':id'=>$id,':name'=>$name],[':id'=>$id,':name'=>$name]](推薦)或為[ [1=>$id,2=>$name],[1=>$id,2=>$name]]
  98. * @param bool $one 是否回傳一條內(nèi)容預(yù)設(shè)為否這裡如果設(shè)定為true那麼每一條sql都只回傳一條資料
  99. */
  100. 公用函數(shù)查詢($arr_sql, $arr_data = [] , $one = false)
  101. {
  102. if(!is_array($arr_sql) ||空($arr_sql) || !is_array($arr_data))
  103. return false;
  104. $this->free();
  105. $res = [];$i = 0;
  106. foreach ( $ arr_sql as $val) {
  107. if(!isset($arr_data[$i]))
  108. $arr_data[$i] = [];
  109. elseif(!is_array($arr_data[$i]) ))
  110. throw new Exception('查詢sql時發(fā)生錯誤:'.$val.' where:'.$arr_data[$i]);
  111. $res[] = $this->queryCommon ( $arr_data[$i],$val,$one);
  112. $i ;
  113. }
  114. return $res;
  115. }
  116. /**
  117. * 分頁封裝
  118. *
  119. * @param string $sql
  120. * @param int $page 表示從第幾頁開始取
  121. * @param int $pageSize 表示每頁多少條
  122. * @param array $data 查詢的條件
  123. */
  124. public function limitQuery($sql, $page=0, $pageSize=20, $data = [])
  125. {
  126. $page = intval($page);
  127. if ($page return [];
  128. }
  129. $pageSize = intval($pageSize);
  130. if ($pageSize > 0) { // pageSize 為0時表示取得所有資料
  131. $sql .= ' LIMIT ' . $pageSize;
  132. if ($page > 0) {
  133. $start_limit = ($page - 1) * $pageSize;
  134. $sql .= ' OFFSET ' 。 > }
  135. return $this->query($sql, $data);
  136. }
  137. /**
  138. * 這個是用來進行新增刪除修改操作使用事務(wù)操作
  139. * @param string $sql 執(zhí)行查詢的sql語句
  140. * @param array $data 查詢的條件格式為[':id'= >$id,':name'=>$name](推薦)或為[1=>$id,2=>$name]
  141. * @param bool $Transaction 是否交易操作預(yù)設(shè)為否
  142. */
  143. public functionexecuteDDL($sql, $data = [ ],$Transaction = false){
  144. if (!is_array($data) || !is_string($sql))
  145. return false;
  146. $this->free();
  147. if($Transaction)
  148. $this->pdo->beginTransaction();//開啟交易
  149. try{
  150. $ this->execRes($data,$sql);
  151. if($Transaction)
  152. $this->pdo->commit();//提交交易
  153. return $this->; lastInsID;
  154. } catch (Exception $e) {
  155. if($Transaction)
  156. $this->pdo->rollBack();//交易回滾
  157. throw new Exception('錯誤 DDLExecute '.$e->getMessage());
  158. return false;
  159. }
  160. }
  161. /**
  162. * 這個是用來進行新增刪除修改操作使用事務(wù)操作
  163. * 它是執(zhí)行多條的
  164. * @param array $arr_sql 需要執(zhí)行操作的SQL語句數(shù)組
  165. * @param array $ arr_data 與陣列對應(yīng)SQL語句的條件
  166. * @param bool $Transaction 是否事務(wù)操作預(yù)設(shè)為否
  167. * /
  168. public functionexecuteDDLes($arr_sql, $arr_data = [],$Transaction = false){
  169. if(!is_array($arr_sql) || 空($arr_sql) || !is_array($ arr_data))
  170. return false;
  171. $res = [];
  172. $this->free();
  173. if($Transaction)
  174. $this->pdo-> beginTransaction();//開啟事務(wù)
  175. try{
  176. $i = 0;
  177. foreach($arr_sql as $val){
  178. if(!isset( $arr_data[$i]))
  179. $arr_data[$i] = [];
  180. elseif(!is_array($arr_data[$i])){
  181. if($Transaction)
  182. $ this->pdo->rollBack() ;// 交易回溯
  183. throw new Exception('Error where DDLExecutees sql:'.$val.' where:'.$arr_data[$i]);
  184. }
  185. $this- >execRes($arr_data[$i],$val);
  186. $res[] = $this->lastInsID;
  187. $i ;
  188. }
  189. if($Transaction)
  190. $this->pdo->commit();// 交易提交
  191. return $res;
  192. } catch (Exception $ e) {
  193. if($Transaction)
  194. $ this->pdo->rollBack();//交易回滾
  195. throw new Exception('Error DDLExecutees array_sql:'.json_encode($arr_sql) ).' '.$e->getMessage());
  196. 回傳 false;
  197. }
  198. 回傳 $res;
  199. }
  200. /**
  201. * 此方法是用來計算查詢傳回的條數(shù)注意它只支援SELECT COUNT(*) FROM TABLE...或SELECT COUNT(0) FROM TABLE...方式
  202. * @param string $sql查詢的sql語句
  203. * @param array $data SQL語句的條件
  204. */
  205. public function countRows($sql,$data = []){
  206. if (!is_array($data) ||空($sql) || !is_string($sql))
  207. return false;
  208. $this->free();
  209. $res = $this->pdoExec($data,$sql);
  210. if($res == false)
  211. return false;
  212. return $this->statement->fetchColumn();
  213. }
  214. /**
  215. * 此方法是用來計算查詢傳回的條數(shù) 它是執(zhí)行多條SQL
  216. * @param string $sql 查詢的sql語句
  217. * @param array $data SQL語句的條件
  218. */
  219. public function countRowses($arr_sql,$arr_data = []){
  220. if(!is_array($arr_sql) || empempty($ arr_sql) || !is_array($arr_data))
  221. 回傳false;
  222. $res = [];
  223. $this->free();
  224. $i = 000 ;
  225. foreach ($arr_sql as $val) {
  226. if(!isset($arr_data[$i]))
  227. $arr_data[$i] = [];
  228. elseif(!is_array ( $arr_data[$i]))
  229. throw new Exception('Error where CountRowses sql:'.$val.' where:'.$arr_data[$i]);
  230. $res1 = $ this ->pdoExec($arr_data[$i],$val);
  231. if($res1 == false)
  232. $res[] = false;
  233. else
  234. $res [] = $this->statement->fetchColumn();
  235. }
  236. return $res;
  237. }
  238. /**
  239. * 這裡再提供一個方法 由於專案中會有很多需要提供開啟事務(wù) 然後再進行操作 最後提交
  240. * @param bool $Transaction 是否事務(wù)操作 預(yù)設(shè)為否
  241. */
  242. public function getDB ($Transaction=false)
  243. {
  244. $this->Transaction = $Transaction;
  245. $this->getConnect();
  246. if($Transaction === true )
  247. $this ->pdo->beginTransaction();//開啟事務(wù)
  248. return $this;
  249. }
  250. /**
  251. * 此方法可以執(zhí)行多次它是執(zhí)行DDL語句的
  252. * 注意它是需要配合getDB和sQCommit一起使用不能單獨使用哦
  253. * 如果沒有開啟事務(wù)sQCommit方法可以不調(diào)用
  254. * @param string $sql 查詢的sql語句
  255. * @param array $data SQL語句的條件
  256. */
  257. public function execSq($sql,$data = [])
  258. {
  259. if($this->checkParams($sql,$data) === false)
  260. return false;
  261. 嘗試{
  262. $this- >execRes($data,$sql);
  263. return $this->lastInsID;
  264. } catch (Exception $e) {
  265. if(isset($ this->Transaction) && $this->Transaction === true)
  266. $this->pdo->rollBack();//交易回滾
  267. throw new Exception('Error execSq'.$e->getMessage());
  268. return false;
  269. } 最後 {
  270. if (!empty($this->statement))
  271. {
  272. $this->statement->closeCursor();
  273. unset($this->statement);
  274. }
  275. }
  276. }
  277. /* *
  278. * 執(zhí)行查詢的方法它需要傳遞一個連接資料庫物件
  279. * @param string $sql 執(zhí)行查詢的sql語句
  280. * @param array $data 查詢的條件格式為[':id'=> $id,':name'=>$name](推薦)或為[1=>$id,2=>$name]
  281. * @param bool $one 是否回傳一條內(nèi)容預(yù)設(shè)為否
  282. */
  283. public function querySq($sql,$data = [],$one = false)
  284. {
  285. if($this->checkParams($sql,$data) = == false)
  286. return false;
  287. return $this->pdoExecSq($sql,$data,[1,$one]);
  288. }
  289. /* *
  290. * 分頁封裝
  291. *
  292. * @param string $sql
  293. * @param int $page 表示從第幾頁開始取
  294. * @param int $pageSize 表示每頁多少條
  295. * @param array $data 查詢的條件
  296. */
  297. public function limitQuerySq($sql, $page=0, $pageSize=20, $data = [])
  298. {
  299. $page = intval($page);
  300. if ($page return [];
  301. }
  302. $pageSize = intval($pageSize);
  303. if ($pageSize > 0) { // pageSize 為0時表示取得所有資料
  304. $ sql .= '限制' 。 ;
  305. }
  306. }
  307. return $this->querySq($sql, $data);
  308. }
  309. /**
  310. * 此方法是用來計算查詢傳回的條數(shù)注意它只支援SELECT COUNT(*) FROM TABLE...或SELECT COUNT(0) FROM TABLE...方式
  311. * @param string $sql查詢的sql語句
  312. * @param array $data SQL語句的條件
  313. */
  314. 公共函數(shù)countRowsSq ($sql,$data = []){
  315. if($this->checkParams($sql,$data) === false)
  316. return false;
  317. return $this->pdoExecSq($ sql,$data,[2]);
  318. }
  319. /**
  320. * 這裡再提供一個方法 這是最後提交操作 如果沒有開啟事務(wù) 此方法最後可以不呼叫的
  321. */
  322. public function sQCommit()
  323. {
  324. if(empty($this->pdo) || !is_object($this->pdo) pdo))
  325. return false;
  326. if(isset($this->Transaction) && $this->Transaction === true)
  327. $this->pdo->commit() ;//提交事務(wù)
  328. unset($this->pdo);
  329. }
  330. /**
  331. * 內(nèi)部呼叫方法
  332. */
  333. public function checkParams($sql,$data)
  334. {
  335. if ($this->pdo) || !is_object($this->pdo) || !is_array($data) || 空($sql) || !is_string($sql))
  336. 回傳false;
  337. 回傳true;
  338. }
  339. /**
  340. * 內(nèi)部呼叫方法
  341. */
  342. 外部函數(shù)pdoExecSq($sql,$data,$ select = []){
  343. 嘗試{
  344. $res = $this->pdoExec($data,$sql);
  345. if(empty($select))
  346. return $res;
  347. else{
  348. if ($select[0] === 1){
  349. if($select[1] === true)
  350. return $this->statement->fetch( PDO::FETCH_ASSOC);
  351. else
  352. return $this->statement->fetchAll(PDO::FETCH_ASSOC);
  353. }elseif($select[0] === 2)
  354. return $this->statement->fetchColumn();
  355. else
  356. return false;
  357. }
  358. } catch (Exception $e) {
  359. throw new Exception($e-> ;getMessage());
  360. return false;
  361. } 最後{
  362. if (!empty($this->statement))
  363. {
  364. $this->statement->; closeCursor();
  365. unset($this->語句);
  366. }
  367. }
  368. }
  369. /**
  370. * 內(nèi)部呼叫方法
  371. */
  372. 中斷函數(shù) execRes( $資料,$sql){
  373. $res = $this->pdoExec($data,$sql);
  374. $in_id = $this->pdo->lastInsertId( );
  375. if (preg_match("/^s*(INSERTs INTO|REPLACEs INTO)s /i", $sql) && !empty($in_id))
  376. $this->lastInsID = $in_id;
  377. else
  378. $this->lastInsID = $res;
  379. }
  380. /**
  381. * 內(nèi)部呼叫方法 用來直接執(zhí)行SQL語句的方法
  382. */
  383. 外部函數(shù)pdoExec($data,$sql ){
  384. $ $ this->statement = $this->pdo->prepare($sql);
  385. if (false === $this->statement)
  386. return false;
  387. if (!empty($data) )
  388. {
  389. foreach ($data as $k =>; $v)
  390. {
  391. $this->語句->bindValue($k, $v);
  392. }
  393. }
  394. $res = $this->語句-> ;execute();
  395. if (!$res)
  396. {
  397. throw new Exception('sql:'.$sql.'where:'.json_encode($data ).'錯誤:'.json_encode($this->statement->errorInfo()));
  398. }else{
  399. return $res;
  400. }
  401. }
  402. /**
  403. * 內(nèi)部呼叫方法 用來釋放的
  404. */
  405. 原生函數(shù)free()
  406. {
  407. if (is_null($this->pdo ))
  408. $this->getConnect();
  409. if (!empty($this->statement))
  410. {
  411. $this->statement->closeCursor();
  412. $this ->statement = null;
  413. }
  414. }
  415. }
  416. ?>
複製程式碼

PHP、PDO、MYSQL


本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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

如何在PHP中實施身份驗證和授權(quán)? 如何在PHP中實施身份驗證和授權(quán)? Jun 20, 2025 am 01:03 AM

tosecurelyhandleauthenticationandationallizationInphp,lofterTheSesteps:1.AlwaysHashPasswordSwithPassword_hash()andverifyusingspasspassword_verify(),usepreparedStatatementStopreventsqlineptions,andStoreSeruserDatain usseruserDatain $ _sessiveferterlogin.2.implementrole-2.imaccessccsccccccccccccccccccccccccc.

如何在PHP中安全地處理文件上傳? 如何在PHP中安全地處理文件上傳? Jun 19, 2025 am 01:05 AM

要安全處理PHP中的文件上傳,核心在於驗證文件類型、重命名文件並限制權(quán)限。 1.使用finfo_file()檢查真實MIME類型,僅允許特定類型如image/jpeg;2.用uniqid()生成隨機文件名,存儲至非Web根目錄;3.通過php.ini和HTML表單限製文件大小,設(shè)置目錄權(quán)限為0755;4.使用ClamAV掃描惡意軟件,增強安全性。這些步驟有效防止安全漏洞,確保文件上傳過程安全可靠。

PHP中==(鬆散比較)和===(嚴(yán)格的比較)之間有什麼區(qū)別? PHP中==(鬆散比較)和===(嚴(yán)格的比較)之間有什麼區(qū)別? Jun 19, 2025 am 01:07 AM

在PHP中,==與===的主要區(qū)別在於類型檢查的嚴(yán)格程度。 ==在比較前會進行類型轉(zhuǎn)換,例如5=="5"返回true,而===要求值和類型都相同才會返回true,例如5==="5"返回false。使用場景上,===更安全應(yīng)優(yōu)先使用,==僅在需要類型轉(zhuǎn)換時使用。

如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? 如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? Jun 19, 2025 pm 05:13 PM

PHP中使用基本數(shù)學(xué)運算的方法如下:1.加法用 號,支持整數(shù)和浮點數(shù),也可用於變量,字符串?dāng)?shù)字會自動轉(zhuǎn)換但不推薦依賴;2.減法用-號,變量同理,類型轉(zhuǎn)換同樣適用;3.乘法用*號,適用於數(shù)字及類似字符串;4.除法用/號,需避免除以零,並註意結(jié)果可能是浮點數(shù);5.取模用%號,可用於判斷奇偶數(shù),處理負(fù)數(shù)時餘數(shù)符號與被除數(shù)一致。正確使用這些運算符的關(guān)鍵在於確保數(shù)據(jù)類型清晰並處理好邊界情況。

如何與PHP的NOSQL數(shù)據(jù)庫(例如MongoDB,Redis)進行交互? 如何與PHP的NOSQL數(shù)據(jù)庫(例如MongoDB,Redis)進行交互? Jun 19, 2025 am 01:07 AM

是的,PHP可以通過特定擴展或庫與MongoDB和Redis等NoSQL數(shù)據(jù)庫交互。首先,使用MongoDBPHP驅(qū)動(通過PECL或Composer安裝)創(chuàng)建客戶端實例並操作數(shù)據(jù)庫及集合,支持插入、查詢、聚合等操作;其次,使用Predis庫或phpredis擴展連接Redis,執(zhí)行鍵值設(shè)置與獲取,推薦phpredis用於高性能場景,Predis則便於快速部署;兩者均適用於生產(chǎn)環(huán)境且文檔完善。

我如何了解最新的PHP開發(fā)和最佳實踐? 我如何了解最新的PHP開發(fā)和最佳實踐? Jun 23, 2025 am 12:56 AM

TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource

什麼是PHP,為什麼它用於Web開發(fā)? 什麼是PHP,為什麼它用於Web開發(fā)? Jun 23, 2025 am 12:55 AM

PHPbecamepopularforwebdevelopmentduetoitseaseoflearning,seamlessintegrationwithHTML,widespreadhostingsupport,andalargeecosystemincludingframeworkslikeLaravelandCMSplatformslikeWordPress.Itexcelsinhandlingformsubmissions,managingusersessions,interacti

如何設(shè)置PHP時區(qū)? 如何設(shè)置PHP時區(qū)? Jun 25, 2025 am 01:00 AM

tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()

See all articles