摘要:擴展原生提供了擴展,意思是數據對象。數據庫鏈接和是指數據源名稱,提供數據庫鏈接的詳細信息。如果數據庫需要認證,則需要提供這兩個參數。讓和返回一個對象,對象的屬性是數據庫的列名。事務的原子性能保證數據的一致性安全性和持久性。
PHP原生提供了PDO擴展,意思是PHP數據對象。
DSN是指數據源名稱,提供數據庫鏈接的詳細信息。一般包含以下信息:
主機名或者IP地址
端口號
數據庫名
字符集
以上信息構成的DSN可以用于PDO類構造函數的第一個參數,第二個和第三個參數分別是數據庫的用戶名和密碼。如果數據庫需要認證,則需要提供這兩個 參數。
保證密碼憑證的安全
把數據庫憑證保存在一個位于文檔根目錄之外的配置文件中,然后在需要的文件中導入這個文件。
預處理語句
在SQL中使用用戶的輸入時,一定要過濾。因此需要使用PDO擴展的預處理語句和參數綁定,這項操作非常簡單。預處理語句是PDO對象的實例,不過我們很少直接去實例化這個類,而是通過PDO實例的prepare方法獲得預處理語句的對象。這個方法得第一個參數是一個sql語句字符串,返回值是一個PDOStatement實例:
prepare($sql);在這個SQL語句中,email這個值可以安全的綁定任何值。
prepare($sql); $email = filter_input(INPUT_GET, "email"); $statement->bindValue(":email", $email);預處理語句會自動過濾$email的值。PDOStatement的第三個參數可以制定綁定值的類型,不填的話默認就是字符串類型。可選的常量類型如下
PDO::PARAM_BOOL
PDO::PARAM_NULL
PDO::PARAM_INT
PDO::PARAM_STR(默認值)
查詢結果
如果執行的是select方法,返回的數據我們需要使用fetch()、fetchAll()、fetchColumn()和fetchObject()方法獲取查詢結果。
//把預處理語句獲得的結果當成關聯數組處理 $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(); //迭代結果 while(($result = $statement->fetch(PDO::FETCH_ASSOC)) !== false) { echo $result["email"]; }fetch、fetchAll方法的參數可選
PDO::FETCH_ASSOC:返回一個關聯數組
PDO::FETCH_NUM:返回一個鍵為數字的數組,數組的鍵是數據庫列在查詢結果中的索引
PDO::FETCH_BOTH:返回一個既有鍵為列名又有鍵為數字的數組。
PDO::FETCH_OBJ:讓fetch()和fetchAll()返回一個對象,對象的屬性是數據庫的列名。
不推薦使用fetchAll(),除非你可以十分確定可用內存放得下整個查詢結果。如果只關心查詢結果中的一列,可以使用fetchColumn()方法,這個方法的作用和fetch()方法類似,返回查詢結果中下一行的某一列,該方法只有一個參數用于制定所需要的索引。// 構建并執行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; }因為在SQL語句中,email出現在了第二個字段的位置,所以這里使用索引1取出來。我們還可以使用fetchObj()方法來獲取查詢結果中的行,這個方法把行行當成對象,對象的屬性是查詢結果中的列。
// 構建并執行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; }事務
事務是指把一系列數據庫語句當成單個的邏輯執行單元執行,也就是說事務中的一系列SQL查詢要么都成功,要么不執行。事務的原子性能保證數據的一致性、安全性和持久性。事務還有一個很好的副作用就是提升性能,因為事務是把多個查詢排成隊列,一次性全部執行。
專題系列PHP專題系列目錄地址:https://github.com/xx19941215/webBlog
PHP專題系列預計寫二十篇左右,主要總結我們日常PHP開發中容易忽略的基礎知識和現代PHP開發中關于規范、部署、優化的一些實戰性建議,同時還有對Javascript語言特點的深入研究。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/23290.html
摘要:過濾驗證和轉義不要相信任何來自不受自己直接控制的數據源中的數據。加密和哈希不是一回事,加密是雙向算法,加密的數據可以被解密。使用密碼哈希簡化計算密碼哈希和驗證密碼的操作。密碼的哈希值存儲在類型的數據庫列中。 過濾、驗證和轉義 1).不要相信任何來自不受自己直接控制的數據源中的數據。包括但不限于: $_GET $_POST $_REQUEST $_COOKIE $argv php://...
摘要:多字節字符串假設字符串中的每一個字符都是八位字符,占用一個字節的內存。如果使用原生的字符串函數處理這些多字節字符串,會得到意外的錯誤。字符編碼一定要知道數據的字符編碼。擴展不僅可以處理字符串,還可以在不同的字符編碼之間轉換多字節字符串。 多字節字符串 1).PHP假設字符串中的每一個字符都是八位字符,占用一個字節的內存。但是,你有可能會遇到多字節字符串。2).這里所說的多字節字符串是指...
摘要:框架之間通過接口自動加載和標準的編碼風格進行合作。該規范的精髓是把命名空間的前綴和系統中的目錄對應起來。 PHP-FIG 1).即PHP Framework Interop Group。這個組織發布推薦的規范,而不是強制規范。2).PHP-FIG的使命是實現框架的互操作性。框架的互操作性指的是通過自動加載機制、接口和標準的風格,讓框架互相合作。3).框架之間通過接口、自動加載和標準的編...
摘要:預測和捕獲并處理異常是我們自己的責任,因為未捕獲的異常可能會導致應用終止運行,顯示錯誤信息。處理并記錄異常你的代碼還原成之前的異常處理程序錯誤我們可以使用函數或者在文件中使用指令告訴報告或者忽略那些錯誤。 異常 1).異常是Exception類的對象,在遇到無法修復的狀況時拋出,例如遠程API沒有響應或者數據庫查詢失敗再或者是無法滿足程序運行的前置條件。出現問題的時候異常用于主動出擊,...
摘要:簡單來說,就是我們創建一對密鑰,其中一個是私鑰保存在本地設備中,另一個是公鑰,傳到你的中,之所以叫做密鑰對,是因為使用公鑰加密的消息只能使用對應的私鑰解密。 配置 1).如果你使用的不是Pass,那么先配置VPS或者專用的服務器才能運行PHP應用。本文假設你會使用vim或者nano編輯器。2).我們選擇nginx服務器來作為我們的web服務器。 首次登錄 ssh root@123.45...
閱讀 4396·2021-11-24 10:24
閱讀 1421·2021-11-22 15:22
閱讀 2052·2021-11-17 09:33
閱讀 2458·2021-09-22 15:29
閱讀 527·2019-08-30 15:55
閱讀 1667·2019-08-29 18:42
閱讀 2744·2019-08-29 12:55
閱讀 1785·2019-08-26 13:55