PHP PDO是一個讓PHP程序員可以輕松訪問數據庫的工具,其相比于php原生的MySQL相關函數具有多種有點。
首先,PDO可以使用眾多不同的數據庫。雖然php本身提供的mysql函數可以實現對MySQL數據庫的操作,但是使用PDO可以將代碼更加易于擴展,因為如果你在將來需要更換數據庫,你無需改動代碼中的絕大部分部分,而是只需要修改少量的地方。我們可以通過如下代碼來向mysql連接并將數據查詢到數組$result中:
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$stmt = $dbh->query('SELECT * fromusers
');
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
另外,在代碼中使用了PDO::FETCH_ASSOC來獲取關聯數組,而不是默認的返回關聯和索引數組兩者混合的形式,這樣在數組訪問時可以將代碼寫清晰一點,便于其他程序員的閱讀理解。
其次,PDO提供了代碼占位符的支持,可以避免SQL注入這個安全漏洞。這種漏洞的成因在于在拼接SQL語句時,如果傳入的參數不經處理就拼接入SQL語句中,便可以造成SQL注入的攻擊漏洞。但是使用PDO時,可以使用預處理的SQL查詢,并將SQL查詢語句中的參數用占位符代替其應有的值,預編譯過程中會將值轉義處理以防止攻擊,例子如下:
$stmt = $dbh->prepare('SELECT * fromusers
whereusername
= :username'); $stmt->execute(array(':username' => $username)); $row = $stmt->fetch();
這個例子中,我們使用了命名占位符:username,并在execute中傳遞了一個數組,其中鍵名為占位符名稱,而鍵值就是該占位符需要代替的值。
最后,PDO提供了優秀的錯誤處理。在使用PDO時,如果一個錯誤出現了,PDO會立刻拋出一個PDOException異常,這意味著你無需自己編寫能力有限的錯誤處理代碼,因為異常會在訪問數據庫時發生并自動拋出。
總體而言,PDO提供了一個良好的訪問數據庫的工具,包括了眾多好處,如跨平臺支持、防注入漏洞。