PHP PDO技术详解及案例讲解
引言
PDO(PHP Data Objects)是PHP中的一个轻量级数据访问抽象层,它提供了一个数据访问接口,无论使用哪种数据库,都可以使用统一的函数和方法来进行数据库操作。PDO支持多种数据库,包括MySQL、PostgreSQL、SQL Server、SQLite等。
连接到数据库
使用PDO连接数据库非常简单,可以通过创建PDO实例并传递DSN(数据源名称)、用户名和密码来实现。
try {
$dsn = 'mysql:host=localhost;dbname=testdb';
$username = 'root';
$password = '';
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new PDO($dsn, $username, $password, $options);
echo "连接成功";
} catch (PDOException $e) {
echo "连接失败: " . $e->getMessage();
}
执行查询
连接到数据库后,可以使用PDO对象的方法来执行SQL查询。常用的方法有`query()`和`exec()`。
- `query()`方法用于执行SELECT语句,返回PDOStatement对象。
- `exec()`方法用于执行INSERT、UPDATE、DELETE语句,返回影响的行数。
$stmt = $pdo->query("SELECT * FROM users");
while ($row = $stmt->fetch()) {
echo $row['username'] . "
";
}
$affected_rows = $pdo->exec("DELETE FROM users WHERE id = 1");
echo $affected_rows . " 行被删除";
预处理语句
预处理语句是PDO的一个重要特性,它可以有效防止SQL注入攻击。预处理语句首先编译SQL语句,然后将参数绑定到SQL语句中,最后执行SQL语句。
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->bindParam(':username', $username);
$username = 'admin';
$stmt->execute();
while ($row = $stmt->fetch()) {
echo $row['username'] . "
";
}
案例讲解
下面是一个完整的示例,展示了如何使用PDO连接到MySQL数据库,并查询用户信息。
PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new PDO($dsn, $username, $password, $options);
echo "连接成功
";
// 查询用户信息
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->bindParam(':username', $user);
$user = 'admin';
$stmt->execute();
while ($row = $stmt->fetch()) {
echo "用户名: " . $row['username'] . "
";
echo "邮箱: " . $row['email'] . "
";
}
} catch (PDOException $e) {
echo "连接失败: " . $e->getMessage();
}
?>