PDO 数据库连接
PDO 连接 MySQL、错误模式、fetch/fetchAll、事务
PDO 数据库连接
PDO(PHP Data Objects)是 PHP 访问数据库的标准方式——统一的 API,支持 MySQL/PostgreSQL/SQLite 等多种数据库。
学完本章你将: 掌握 PDO 连接、错误模式、fetch/fetchAll。
连接数据库
php
<?php
$dsn = "mysql:host=localhost;dbname=test;charset=utf8mb4";
$user = "root";
$pass = "";
try {
$pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // 抛异常
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // 默认关联数组
PDO::ATTR_EMULATE_PREPARES => false, // 使用真正的预处理
]);
} catch (PDOException $e) {
die("连接失败:" . $e->getMessage());
}
三种 Fetch 模式
php
<?php
$stmt = $pdo->query("SELECT * FROM users LIMIT 3");
// FETCH_ASSOC — 关联数组(推荐)
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row["name"];
}
// fetchAll — 一次性拿到所有
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
// FETCH_OBJ — 对象
$user = $stmt->fetch(PDO::FETCH_OBJ);
echo $user->name;
// FETCH_CLASS — 映射到类的实例
class User { }
$user = $stmt->fetch(PDO::FETCH_CLASS, User::class);
错误处理
php
<?php
// 推荐:异常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
$stmt = $pdo->query("SELECT * FROM nonexistent_table");
} catch (PDOException $e) {
echo "查询失败:" . $e->getMessage();
// 详细错误只用于开发环境!
}
💡 PDO 也支持 SQLite:
$dsn = "sqlite:" . __DIR__ . "/database.sqlite";