成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP最佳實(shí)踐之?dāng)?shù)據(jù)庫

cnTomato / 1734人閱讀

摘要:擴(kuò)展原生提供了擴(kuò)展,意思是數(shù)據(jù)對(duì)象。數(shù)據(jù)庫鏈接和是指數(shù)據(jù)源名稱,提供數(shù)據(jù)庫鏈接的詳細(xì)信息。如果數(shù)據(jù)庫需要認(rèn)證,則需要提供這兩個(gè)參數(shù)。讓和返回一個(gè)對(duì)象,對(duì)象的屬性是數(shù)據(jù)庫的列名。事務(wù)的原子性能保證數(shù)據(jù)的一致性安全性和持久性。

PDO擴(kuò)展

PHP原生提供了PDO擴(kuò)展,意思是PHP數(shù)據(jù)對(duì)象。

數(shù)據(jù)庫鏈接和DSN

DSN是指數(shù)據(jù)源名稱,提供數(shù)據(jù)庫鏈接的詳細(xì)信息。一般包含以下信息:

主機(jī)名或者IP地址

端口號(hào)

數(shù)據(jù)庫名

字符集

以上信息構(gòu)成的DSN可以用于PDO類構(gòu)造函數(shù)的第一個(gè)參數(shù),第二個(gè)和第三個(gè)參數(shù)分別是數(shù)據(jù)庫的用戶名和密碼。如果數(shù)據(jù)庫需要認(rèn)證,則需要提供這兩個(gè) 參數(shù)。


保證密碼憑證的安全

把數(shù)據(jù)庫憑證保存在一個(gè)位于文檔根目錄之外的配置文件中,然后在需要的文件中導(dǎo)入這個(gè)文件。

預(yù)處理語句

在SQL中使用用戶的輸入時(shí),一定要過濾。因此需要使用PDO擴(kuò)展的預(yù)處理語句和參數(shù)綁定,這項(xiàng)操作非常簡(jiǎn)單。預(yù)處理語句是PDO對(duì)象的實(shí)例,不過我們很少直接去實(shí)例化這個(gè)類,而是通過PDO實(shí)例的prepare方法獲得預(yù)處理語句的對(duì)象。這個(gè)方法得第一個(gè)參數(shù)是一個(gè)sql語句字符串,返回值是一個(gè)PDOStatement實(shí)例:

prepare($sql);

在這個(gè)SQL語句中,email這個(gè)值可以安全的綁定任何值。

prepare($sql);
$email =  filter_input(INPUT_GET, "email");
$statement->bindValue(":email", $email);

預(yù)處理語句會(huì)自動(dòng)過濾$email的值。PDOStatement的第三個(gè)參數(shù)可以制定綁定值的類型,不填的話默認(rèn)就是字符串類型??蛇x的常量類型如下

PDO::PARAM_BOOL

PDO::PARAM_NULL

PDO::PARAM_INT

PDO::PARAM_STR(默認(rèn)值)

查詢結(jié)果

如果執(zhí)行的是select方法,返回的數(shù)據(jù)我們需要使用fetch()、fetchAll()、fetchColumn()和fetchObject()方法獲取查詢結(jié)果。

//把預(yù)處理語句獲得的結(jié)果當(dāng)成關(guān)聯(lián)數(shù)組處理
$sql = "SELECT id, email FROM users WHERE email = :email";
$statement = $pdo->prepare($sql);
$email = filter_input(INPUT_GET, "email");
$statement->bindValue(":email", $email);
$statement->execute();
//迭代結(jié)果
while(($result = $statement->fetch(PDO::FETCH_ASSOC)) !== false) {
    echo $result["email"];
}

fetch、fetchAll方法的參數(shù)可選

PDO::FETCH_ASSOC:返回一個(gè)關(guān)聯(lián)數(shù)組

PDO::FETCH_NUM:返回一個(gè)鍵為數(shù)字的數(shù)組,數(shù)組的鍵是數(shù)據(jù)庫列在查詢結(jié)果中的索引

PDO::FETCH_BOTH:返回一個(gè)既有鍵為列名又有鍵為數(shù)字的數(shù)組。

PDO::FETCH_OBJ:讓fetch()和fetchAll()返回一個(gè)對(duì)象,對(duì)象的屬性是數(shù)據(jù)庫的列名。
不推薦使用fetchAll(),除非你可以十分確定可用內(nèi)存放得下整個(gè)查詢結(jié)果。如果只關(guān)心查詢結(jié)果中的一列,可以使用fetchColumn()方法,這個(gè)方法的作用和fetch()方法類似,返回查詢結(jié)果中下一行的某一列,該方法只有一個(gè)參數(shù)用于制定所需要的索引。

// 構(gòu)建并執(zhí)行SQL查詢
$sql = "SELECT id, name FROM users WHERE email = :email";
$statement = $pdo->prepare($sql);
$email = filter_input(INPUT_GET, "email");
$statement->bindValue(":email",  $email);
$statement->execute();

while(($emal = $statament->fetchCoulmn(1)) !== false) {
    echo $email;
}

因?yàn)樵赟QL語句中,email出現(xiàn)在了第二個(gè)字段的位置,所以這里使用索引1取出來。我們還可以使用fetchObj()方法來獲取查詢結(jié)果中的行,這個(gè)方法把行行當(dāng)成對(duì)象,對(duì)象的屬性是查詢結(jié)果中的列。

// 構(gòu)建并執(zhí)行SQL查詢
$sql = "SELECT id, name FROM users WHERE email = :email";
$statement = $pdo->prepare($sql);
$email = filter_input(INPUT_GET, "email");
$statement->bindValue(":email",  $email);
$statement->execute();

while(($result = $statament->fetchObj()) !== false) {
    echo $result->email;
}
事務(wù)

事務(wù)是指把一系列數(shù)據(jù)庫語句當(dāng)成單個(gè)的邏輯執(zhí)行單元執(zhí)行,也就是說事務(wù)中的一系列SQL查詢要么都成功,要么不執(zhí)行。事務(wù)的原子性能保證數(shù)據(jù)的一致性、安全性和持久性。事務(wù)還有一個(gè)很好的副作用就是提升性能,因?yàn)槭聞?wù)是把多個(gè)查詢排成隊(duì)列,一次性全部執(zhí)行。

專題系列

PHP專題系列目錄地址:https://github.com/xx19941215/webBlog
PHP專題系列預(yù)計(jì)寫二十篇左右,主要總結(jié)我們?nèi)粘HP開發(fā)中容易忽略的基礎(chǔ)知識(shí)和現(xiàn)代PHP開發(fā)中關(guān)于規(guī)范、部署、優(yōu)化的一些實(shí)戰(zhàn)性建議,同時(shí)還有對(duì)Javascript語言特點(diǎn)的深入研究。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/23290.html

相關(guān)文章

  • PHP最佳實(shí)踐過濾、驗(yàn)證、轉(zhuǎn)義和密碼

    摘要:過濾驗(yàn)證和轉(zhuǎn)義不要相信任何來自不受自己直接控制的數(shù)據(jù)源中的數(shù)據(jù)。加密和哈希不是一回事,加密是雙向算法,加密的數(shù)據(jù)可以被解密。使用密碼哈希簡(jiǎn)化計(jì)算密碼哈希和驗(yàn)證密碼的操作。密碼的哈希值存儲(chǔ)在類型的數(shù)據(jù)庫列中。 過濾、驗(yàn)證和轉(zhuǎn)義 1).不要相信任何來自不受自己直接控制的數(shù)據(jù)源中的數(shù)據(jù)。包括但不限于: $_GET $_POST $_REQUEST $_COOKIE $argv php://...

    HitenDev 評(píng)論0 收藏0
  • PHP最佳實(shí)踐多字節(jié)字符串、字符編碼

    摘要:多字節(jié)字符串假設(shè)字符串中的每一個(gè)字符都是八位字符,占用一個(gè)字節(jié)的內(nèi)存。如果使用原生的字符串函數(shù)處理這些多字節(jié)字符串,會(huì)得到意外的錯(cuò)誤。字符編碼一定要知道數(shù)據(jù)的字符編碼。擴(kuò)展不僅可以處理字符串,還可以在不同的字符編碼之間轉(zhuǎn)換多字節(jié)字符串。 多字節(jié)字符串 1).PHP假設(shè)字符串中的每一個(gè)字符都是八位字符,占用一個(gè)字節(jié)的內(nèi)存。但是,你有可能會(huì)遇到多字節(jié)字符串。2).這里所說的多字節(jié)字符串是指...

    Cympros 評(píng)論0 收藏0
  • PHP最佳實(shí)踐系列標(biāo)準(zhǔn)

    摘要:框架之間通過接口自動(dòng)加載和標(biāo)準(zhǔn)的編碼風(fēng)格進(jìn)行合作。該規(guī)范的精髓是把命名空間的前綴和系統(tǒng)中的目錄對(duì)應(yīng)起來。 PHP-FIG 1).即PHP Framework Interop Group。這個(gè)組織發(fā)布推薦的規(guī)范,而不是強(qiáng)制規(guī)范。2).PHP-FIG的使命是實(shí)現(xiàn)框架的互操作性。框架的互操作性指的是通過自動(dòng)加載機(jī)制、接口和標(biāo)準(zhǔn)的風(fēng)格,讓框架互相合作。3).框架之間通過接口、自動(dòng)加載和標(biāo)準(zhǔn)的編...

    DoINsiSt 評(píng)論0 收藏0
  • PHP最佳實(shí)踐異常和錯(cuò)誤

    摘要:預(yù)測(cè)和捕獲并處理異常是我們自己的責(zé)任,因?yàn)槲床东@的異??赡軙?huì)導(dǎo)致應(yīng)用終止運(yùn)行,顯示錯(cuò)誤信息。處理并記錄異常你的代碼還原成之前的異常處理程序錯(cuò)誤我們可以使用函數(shù)或者在文件中使用指令告訴報(bào)告或者忽略那些錯(cuò)誤。 異常 1).異常是Exception類的對(duì)象,在遇到無法修復(fù)的狀況時(shí)拋出,例如遠(yuǎn)程API沒有響應(yīng)或者數(shù)據(jù)庫查詢失敗再或者是無法滿足程序運(yùn)行的前置條件。出現(xiàn)問題的時(shí)候異常用于主動(dòng)出擊,...

    TigerChain 評(píng)論0 收藏0
  • PHP最佳實(shí)踐上線準(zhǔn)備

    摘要:簡(jiǎn)單來說,就是我們創(chuàng)建一對(duì)密鑰,其中一個(gè)是私鑰保存在本地設(shè)備中,另一個(gè)是公鑰,傳到你的中,之所以叫做密鑰對(duì),是因?yàn)槭褂霉€加密的消息只能使用對(duì)應(yīng)的私鑰解密。 配置 1).如果你使用的不是Pass,那么先配置VPS或者專用的服務(wù)器才能運(yùn)行PHP應(yīng)用。本文假設(shè)你會(huì)使用vim或者nano編輯器。2).我們選擇nginx服務(wù)器來作為我們的web服務(wù)器。 首次登錄 ssh [email protected]...

    sumory 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<