PHP PDO是什么?為什么要使用它?
PHP PDO是PHP的一個輕量級且靈活的數據庫連接抽象層,它能夠支持多種數據庫類型,包括MySQL、PostgreSQL、Oracle和SQLite等等,同時也保證數據傳輸的安全性。
相較于常見的mysql_connect和mysql_query方法,PDO有如下優點:
- 支持多種數據庫類型
- 提供了一致的接口,使得編碼更加簡單
- 可以通過預備語句來防止SQL注入攻擊
- 提供了更好的錯誤處理機制,使得調試更加容易
- 支持事務處理
下面我們將通過一個簡單的例子,來演示如何使用PDO連接MySQL數據庫。
//連接數據庫的一般思路如下: $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; $conn = mysqli_connect($servername, $username, $password, $dbname); if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } //使用PDO連接MySQL數據庫 $dsn = "mysql:host=localhost;dbname=myDB"; $username = "username"; $password = "password"; $options = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ); try { $conn = new PDO($dsn, $username, $password, $options); echo "連接成功"; } catch (PDOException $e) { echo "連接失敗:" . $e->getMessage(); }
上述代碼中,我們通過PDO::ATTR_ERRMODE來設置PDO錯誤模式,當出現錯誤時,PDO將拋出異常,并在頁面上顯示錯誤信息。這種錯誤處理模式比較安全,因為它可以顯示具體的代碼行數和錯誤信息,可以更方便的進行調試。如果不進行設置,PDO將默認使用PDO::ERRMODE_SILENT模式,不會拋出任何錯誤信息。
下面我們將通過一個簡單的例子,來演示如何使用PDO進行數據查詢。
//查詢數據的一般思路如下: $sql = "SELECT * FROM MyGuests WHERE lastname='Doe'"; $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) { // 輸出數據 while($row = mysqli_fetch_assoc($result)) { echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; } } else { echo "0 結果"; } //使用PDO查詢數據 $conn = new PDO($dsn, $username, $password, $options); $stmt = $conn->query("SELECT * FROM MyGuests WHERE lastname='Doe'"); // 設置結果集為關聯數組 $stmt->setFetchMode(PDO::FETCH_ASSOC); while ($row = $stmt->fetch()) { echo "id: " . $row["id"] . " - Name: " . $row["firstname"] . " " . $row["lastname"] . "<br/>"; }
可以看到,使用PDO進行數據查詢,需要使用PDO::query方法,并將結果集設置為關聯數組,使用PDO::FETCH_ASSOC模式,從而輸出數據。
除了查詢數據,PDO還可以用來插入、更新和刪除數據。下面我們再來演示如何使用PDO插入數據。
//插入數據的一般思路如下: $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe', 'john@example.com')"; if (mysqli_query($conn, $sql)) { echo "記錄插入成功"; } else { echo "Error: " . $sql . "<br>" . mysqli_error($conn); } //使用PDO插入數據 $conn = new PDO($dsn, $username, $password, $options); $sql = "INSERT INTO MyGuests (firstname, lastname, email) VALUES ('John', 'Doe', 'john@example.com')"; if ($conn->exec($sql)) { echo "記錄插入成功"; } else { echo "記錄插入失敗"; }
和查詢數據類似,插入數據時,也需要使用PDO::exec方法,并將執行結果返回輸出到頁面上。
由此可見,PDO的使用比起面向過程的mysqli應該是更加的方便和易用,能夠讓我們減少許多繁瑣的操作,專注于業務的實現。
上一篇php pdo 亂碼
下一篇php pdo 性能