摘要:操作數(shù)據(jù)庫的種形式使用擴展類庫推薦使用擴展類庫這是類庫的升級版,但已經(jīng)不推薦使用擴展包含哪三個類與區(qū)別可以支持多種數(shù)據(jù)庫,而且操作方法一致只支持數(shù)據(jù)庫如何使用連接數(shù)據(jù)庫什么是如何關(guān)閉連接通過來連接數(shù)據(jù)庫,其中必須傳入數(shù)據(jù)源名稱數(shù)據(jù)源名稱是
PHP操作數(shù)據(jù)庫的2種形式
使用 PDO 擴展類庫(推薦)
使用 Mysqli 擴展類庫(這是Mysql類庫的升級版,但已經(jīng)不推薦使用)
PDO 擴展包含哪三個類PDO
PDOStatement
PDOException
PDO 與 Mysqli 區(qū)別PDO 可以支持多種數(shù)據(jù)庫,而且操作方法一致
Mysqli 只支持Mysql數(shù)據(jù)庫
如何使用PDO連接數(shù)據(jù)庫?什么是DSN?如何關(guān)閉連接?通過new PDO()來連接數(shù)據(jù)庫,其中必須傳入DSN數(shù)據(jù)源名稱
try { $db = new PDO($dsn, $user, $password); } catch (PDOException $e) { echo "Connection failed: " . $e->getMessage(); }
DSN(數(shù)據(jù)源名稱)是告訴PDO使用哪款驅(qū)動來連接數(shù)據(jù)庫,每一種數(shù)據(jù)庫DSN都不同
Mysql的DSN mysql:host=localhost;dbname=test
oracle的DSN oci:dbname=//localhost:232/mydb;charset=utf-8
關(guān)閉連接: $db = null;
PDO 與連接相關(guān)的選項如何設(shè)置?設(shè)置連接選項的2種方式
1、new PDO()的第四參數(shù)
//設(shè)置持久數(shù)據(jù)庫連接必須使用這種方式,否則無效 $opt = array( PDO::ATTR_PERSISTENT => true, PDO::ATTR_TIMEOUT => 3600, PDO::ATTR_AUTOCOMMIT => true ); try { $db = new PDO($dsn,$user,$password,$opt); } catch (PDOException $e) { echo "Connection failed: " . $e->getMessage(); }
2、使用PDO對象的setAttribute()方法
try { $db = new PDO($dsn,$user,$password); $db -> setAttribute(PDO::ATTR_TIMEOUT, 3600); } catch (PDOException $e) { echo "Connection failed: " . $e->getMessage(); } //與getAttribute()方法配套PDO 錯誤處理模式該如何設(shè)置?
錯誤處理模式有哪三種?
1、PDO::ERRMODE_SILENT (默認,不提示,需要結(jié)合errorCode()與errorInfo())
2、PDO::ERRMODE_WARNING (警告)
3、PDO::ERRMODE_EXCEPTION (報異常,推薦使用)
一般使用案例
try { $db = new PDO($dsn,$user,$password); $db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { echo "Connection failed: " . $e->getMessage(); }PDO 執(zhí)行SQL有哪些方法?
exec() ----不推薦,后面會有解釋
exec() 主要:執(zhí)行無結(jié)果集的SQL語句 增刪改創(chuàng)建 返回影響行數(shù)
query() ----不推薦,后面會有解釋
query() 主要:執(zhí)行有結(jié)果集的SQL語句 查詢 返回PDOStatement對象
對于某些SQL 既不是操作,也沒有返回結(jié)果,使用上面某種方法都可以
prepare() ----推薦,后面會有解釋
PDO 事務(wù)如何實現(xiàn)?操作的Mysql的數(shù)據(jù)表必須是InnoDB
關(guān)閉自動提交 $db->setAttribute(PDO::ATTR_AUTOCOMMIT, 0);
開啟事務(wù) $db->beginTransaction();
手動提交 $db->commit();
事務(wù)回滾 $db->rollBack();
什么是SQL注入?SQL注入如何防止?事務(wù)完成后,最好把自動提交開啟 $db->setAttribute(PDO::ATTR_AUTOCOMMIT, 1);
SQL注入其實就是用戶輸入的數(shù)據(jù)帶有攻擊成分,所以用戶輸入的信息都是不可靠的
由于以上原因,導(dǎo)致之前exec()和query()方法不常用,因為不安全,但只要不是用過用戶數(shù)據(jù)生成的SQL都可以使用exec()和query()
使用預(yù)處理語句來防止SQL注入
try{ //只是將這個語句放到數(shù)據(jù)庫上,編譯后等待,沒有執(zhí)行 $stmt = $db -> prepare("insert into user(name,pwd,age) values(?,?,?)"); //綁定參數(shù)(?) $stmt -> bindParam(1,$name); $stmt -> bindParam(2,$pwd); $stmt -> bindParam(3,$age); $name = "wwww"; $pwd = "12112"; $age = 18; //執(zhí)行存儲在數(shù)據(jù)庫中的語句 $stmt -> execute(); $name = "bbb"; $pwd = "ad22121"; $age = 20; //執(zhí)行存儲在數(shù)據(jù)庫中的語句 $stmt -> execute(); }catch(PDOException $e){ echo $e->getMessage(); exit(); }
簡化模式:
try{ //只是將這個語句放到數(shù)據(jù)庫上,編譯后等待,沒有執(zhí)行 $stmt = $db -> prepare("insert into user(name,pwd,age) values(?,?,?)"); //執(zhí)行存儲在數(shù)據(jù)庫中的語句 $stmt -> execute(array("wwww","12112",18)); }catch(PDOException $e){ echo $e->getMessage(); exit(); }預(yù)處理語句中有哪兩種占位符?注意事項是什么?
2種占位符:命名占位符和問號占位符
問號占位符就是上面那種
命名占位符,如下,推薦使用命名控制符
try{ //只是將這個語句放到數(shù)據(jù)庫上,編譯后等待,沒有執(zhí)行 $stmt = $db -> prepare("insert into user(name,pwd,age) values(:name,:pwd,:age)"); //綁定參數(shù)(?) $stmt -> bindParam(1,$name); $stmt -> bindParam(2,$pwd); $stmt -> bindParam(3,$age); $name = "wwww"; $pwd = "12112"; $age = 18; //執(zhí)行存儲在數(shù)據(jù)庫中的語句 $stmt -> execute(); $name = "bbb"; $pwd = "ad22121"; $age = 20; //執(zhí)行存儲在數(shù)據(jù)庫中的語句 $stmt -> execute(); }catch(PDOException $e){ echo $e->getMessage(); exit(); }
注意事項
參數(shù)綁定不能應(yīng)用到表名上
//錯誤 $sth = $dbh->prepare("SELECT name, colour, calories FROM ? WHERE calories < ?"); //正確 $sth = $dbh->prepare("SELECT name, colour, calories FROM fruit WHERE calories < ?");
參數(shù)綁定不能應(yīng)用到列名
//錯誤 $sth = $dbh->prepare("SELECT name, colour, calories FROM fruit WHERE ? < ?"); //正確 $sth = $dbh->prepare("SELECT name, colour, calories FROM fruit WHERE calories < ?");PDO 預(yù)處理語句如何增刪改查?
增刪改
try{ $db = new PDO($dsn,$name,$pwd); $db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); }catch(PDOException $e){ echo "Connection failed: " . $e->getMessage(); } try{ $stmt = $db -> prepare("insert into user(name,pwd,age) values(?,?,?)"); $stmt -> execute(array("wtao","23232",14)); $count = $stmt -> rowCount(); if($count === 0){ throw new PDOException(); } $id = $db -> lastInsertId(); }catch(PDOException $e){ echo "Connection failed: " . $e->getMessage(); }
查
try{ $db = new PDO($dsn,$name,$pwd); $db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); }catch(PDOException $e){ echo "Connection failed: " . $e->getMessage(); } try{ $stmt = $db -> prepare("SELECT name, age, title FROM fruit WHERE id < ?"); $stmt -> execute(array(14)); while(list($name,$age,$title) = $stmt->fetch(PDO::FETCH_NUM)){ } }catch(PDOException $e){ echo "Connection failed: " . $e->getMessage(); }注意事項
$stmt -> execute()的返回值,如果在異常模式下,可以不用處理返回值的,只有在不是異常處理的模式下才需要判斷處理
$db -> prepare(); 準備預(yù)處理語句都是多帶帶的,返回PDOStatement對象也就是多帶帶的,如果某個功能需要執(zhí)行多條SQL語句,請先準備好多個PDOStatement對象,然后分別執(zhí)行
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/25644.html
摘要:而是說,程序的外部資源,往往是影響性能的重要因素,尤其是當(dāng)外部資源的連接和數(shù)據(jù)獲取本身速度達不到理想的結(jié)果時。 暫且不討論「PHP 是不是最好的編程語言」,本文我們將分別分析一下在 PHP 程序的后端外圍資源和前端外圍資源,它們對整個 PHP Web 應(yīng)用體驗的影響,這往往比語言本身大得多。 首先,后端外圍資源,是指跟 PHP 運行過程中與語言本身無關(guān)的網(wǎng)絡(luò)與 IO 操作、存儲服務(wù)、中...
摘要:下面程序員雷雪松就詳細的看看下如何配置支持下載并安裝,是一套為和允許程序來跟微軟和數(shù)據(jù)庫交互的動態(tài)庫。注意的路徑重啟查看已經(jīng)安裝的擴展這樣擴展就安裝完成了,就可以使用相關(guān)函數(shù)操作數(shù)據(jù)庫了。原文來源程序員雷雪松的個人博客 因為項目以前的數(shù)據(jù)庫為SQLServer(MSSql),客戶希望不要換數(shù)據(jù)庫。在當(dāng)今客戶就是上帝的理念下,于是只能采用Linux下PHP操作MSSql。由于之前沒什么經(jīng)...
摘要:如何構(gòu)建一個自己的框架為什么我們要去構(gòu)建一個自己的框架可能絕大多數(shù)的人都會說市面上已經(jīng)那么多的框架了,還造什么輪子。 showImg(https://segmentfault.com/img/bVNg9F?w=500&h=500); 如何構(gòu)建一個自己的PHP框架 為什么我們要去構(gòu)建一個自己的PHP框架?可能絕大多數(shù)的人都會說市面上已經(jīng)那么多的框架了,還造什么輪子?。我的觀點造輪子不是目...
摘要:權(quán)限中心的依賴聲明聲明依賴關(guān)系檢查代碼規(guī)范聲明開發(fā)依賴命名空間檢查代碼規(guī)范,執(zhí)行單元測試。單元測試持續(xù)交付一切都如此的完美,沒有測試,又如何可以證明這件事情的完美,又如何可以保障交付的質(zhì)量。 序 權(quán)限管理是無線運營系統(tǒng)中的核心模塊,通過訪問控制策略的配置,來約定人與資源的訪問關(guān)系。 本文著重講解如何通過PHP來構(gòu)建一個靈活、通用、安全的權(quán)限管理系統(tǒng)。 關(guān)于權(quán)限 首先我們來聊聊權(quán)限。 權(quán)...
摘要:性能問題一般不會超過占整個項目性能的,一般在。內(nèi)置函數(shù)的性能優(yōu)劣。幾乎與在函數(shù)中調(diào)用局部變量的速度相當(dāng)。遞增一個全局變量要比遞增一個局部變量慢倍。類似的方法調(diào)用所花費的時間接近于次的局部變量遞增操作。 php性能怎么優(yōu)化?性能是網(wǎng)站運行是否良好的關(guān)鍵因素, 網(wǎng)站的性能與效率影響著公司的運營成本及長遠發(fā)展,編寫出高質(zhì)高效的代碼是我們每個開發(fā)人員必備的素質(zhì),也是我們良好...
閱讀 2528·2021-11-12 10:34
閱讀 1527·2019-08-29 16:15
閱讀 2743·2019-08-29 15:17
閱讀 1450·2019-08-23 17:09
閱讀 439·2019-08-23 11:37
閱讀 2510·2019-08-23 10:39
閱讀 549·2019-08-22 16:43
閱讀 3172·2019-08-22 14:53