PDO (PHP Data Objects) 提供統一的資料庫存取介面,支援多種資料庫驅動程式。本文示範如何使用 PDO 連接 MySQL 並執行查詢,同時修正原文中混雜 SQLite3 的錯誤範例。
<?php
$host = 'localhost';
$dbname = 'test_db';
$username = 'root';
$password = '';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$dbname;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
die("資料庫連線失敗: " . $e->getMessage());
}
?>
<?php
$sql = "SELECT id, name, email FROM users WHERE status = 1";
$stmt = $pdo->query($sql);
while ($row = $stmt->fetch()) {
echo "ID: {$row['id']}, 姓名: {$row['name']}, Email: {$row['email']}
";
}
?>
<?php
$sql = "SELECT * FROM products WHERE category_id = :cat AND price < :max_price";
$stmt = $pdo->prepare($sql);
$stmt->execute(['cat' => 3, 'max_price' => 1000]);
$results = $stmt->fetchAll();
foreach ($results as $product) {
echo "{$product['name']} - NT$ {$product['price']}
";
}
?>
<?php
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([123]);
$user = $stmt->fetch();
if ($user) {
echo "歡迎, {$user['name']}!";
}
?>
| 操作 | 方法 |
|---|---|
| 影響行數 | $stmt->rowCount() |
| 最後插入 ID | $pdo->lastInsertId() |
| 交易控制 | $pdo->beginTransaction() / commit() / rollBack() |
| 錯誤處理 | try-catch 捕捉 PDOException |
sqlite3 類別操作 MySQL,實際應使用 PDO 配合 mysql 驅動PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 以便除錯PDO::ATTR_PERSISTENT => true)