成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

cnTomato / 1778人閱讀

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

PDO擴(kuò)展

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

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

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

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

端口號(hào)

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

字符集

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


保證密碼憑證的安全

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

預(yù)處理語(yǔ)句

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

prepare($sql);

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

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

預(yù)處理語(yǔ)句會(huì)自動(dòng)過(guò)濾$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ù)處理語(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ù)庫(kù)列在查詢結(jié)果中的索引

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

PDO::FETCH_OBJ:讓fetch()和fetchAll()返回一個(gè)對(duì)象,對(duì)象的屬性是數(shù)據(jù)庫(kù)的列名。
不推薦使用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語(yǔ)句中,email出現(xiàn)在了第二個(gè)字段的位置,所以這里使用索引1取出來(lái)。我們還可以使用fetchObj()方法來(lái)獲取查詢結(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ù)庫(kù)語(yǔ)句當(dāng)成單個(gè)的邏輯執(zhí)行單元執(zhí)行,也就是說(shuō)事務(wù)中的一系列SQL查詢要么都成功,要么不執(zhí)行。事務(wù)的原子性能保證數(shù)據(jù)的一致性、安全性和持久性。事務(wù)還有一個(gè)很好的副作用就是提升性能,因?yàn)槭聞?wù)是把多個(gè)查詢排成隊(duì)列,一次性全部執(zhí)行。

專題系列

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

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

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

相關(guān)文章

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

    摘要:過(guò)濾驗(yàn)證和轉(zhuǎn)義不要相信任何來(lái)自不受自己直接控制的數(shù)據(jù)源中的數(shù)據(jù)。加密和哈希不是一回事,加密是雙向算法,加密的數(shù)據(jù)可以被解密。使用密碼哈希簡(jiǎn)化計(jì)算密碼哈希和驗(yàn)證密碼的操作。密碼的哈希值存儲(chǔ)在類型的數(shù)據(jù)庫(kù)列中。 過(guò)濾、驗(yàn)證和轉(zhuǎn)義 1).不要相信任何來(lái)自不受自己直接控制的數(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).這里所說(shuō)的多字節(jié)字符串是指...

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

    摘要:框架之間通過(guò)接口自動(dòng)加載和標(biāo)準(zhǔn)的編碼風(fēng)格進(jìn)行合作。該規(guī)范的精髓是把命名空間的前綴和系統(tǒng)中的目錄對(duì)應(yīng)起來(lái)。 PHP-FIG 1).即PHP Framework Interop Group。這個(gè)組織發(fā)布推薦的規(guī)范,而不是強(qiáng)制規(guī)范。2).PHP-FIG的使命是實(shí)現(xiàn)框架的互操作性??蚣艿幕ゲ僮餍灾傅氖峭ㄟ^(guò)自動(dòng)加載機(jī)制、接口和標(biāo)準(zhǔn)的風(fēng)格,讓框架互相合作。3).框架之間通過(guò)接口、自動(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ì)象,在遇到無(wú)法修復(fù)的狀況時(shí)拋出,例如遠(yuǎn)程API沒(méi)有響應(yīng)或者數(shù)據(jù)庫(kù)查詢失敗再或者是無(wú)法滿足程序運(yùn)行的前置條件。出現(xiàn)問(wèn)題的時(shí)候異常用于主動(dòng)出擊,...

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

    摘要:簡(jiǎn)單來(lái)說(shuō),就是我們創(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ù)器來(lái)作為我們的web服務(wù)器。 首次登錄 ssh root@123.45...

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

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

0條評(píng)論

閱讀需要支付1元查看
<