PDO(PHP Data Objects) 是 PHP 5.1+ 內建的輕量級資料庫抽象層,提供統一介面操作多種資料庫(MySQL、PostgreSQL、SQLite 等),支援預備語句、事務、錯誤處理等現代特性。
| 常數 | 用途 |
|---|---|
PDO::PARAM_BOOL | 布林型別 |
PDO::PARAM_NULL | NULL 型別 |
PDO::PARAM_INT | 整數型別 |
PDO::PARAM_STR | 字串型別 |
PDO::PARAM_LOB | 大型物件型別 |
PDO::FETCH_LAZY | 以物件屬性名對應欄位名 |
PDO::FETCH_ORI_NEXT | 取下一行 |
PDO::FETCH_ORI_PRIOR | 取上一行 |
PDO::FETCH_ORI_FIRST | 取第一行 |
PDO::FETCH_ORI_LAST | 取最後一行 |
PDO::ATTR_PERSISTENT | 建立持久連線 |
<?php
try {
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
// 設定錯誤模式為例外
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Connection failed: " . $e->getMessage());
}
?>
<?php
$stmt = $dbh->prepare("INSERT INTO registry (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
$name = 'one'; $value = 1; $stmt->execute();
$name = 'two'; $value = 2; $stmt->execute();
?>
<?php
$stmt = $dbh->prepare("INSERT INTO registry (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);
$name = 'one'; $value = 1; $stmt->execute();
$name = 'two'; $value = 2; $stmt->execute();
?>
<?php
$stmt = $dbh->prepare("SELECT * FROM registry WHERE name = ?");
if ($stmt->execute(array($_GET['name']))) {
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
print_r($row);
}
}
?>
<?php
try {
$dbh->beginTransaction();
$dbh->exec("INSERT INTO users (name) VALUES ('Alice')");
$dbh->exec("INSERT INTO logs (action) VALUES ('add user')");
$dbh->commit();
} catch (Exception $e) {
$dbh->rollBack();
echo "Failed: " . $e->getMessage();
}
?>
PDO::FETCH_ASSOC:關聯陣列PDO::FETCH_NUM:數值索引陣列PDO::FETCH_BOTH:兩者皆有(預設)PDO::FETCH_OBJ:匿名物件PDO::FETCH_CLASS:映射到指定類別舊專案使用 mysql_* 或 mysqli 的程式碼,建議漸進式重構為 PDO,優先處理有使用者輸入參與的查詢語句。