PHP PDO 获取结果集

PDO(PHP Data Objects)是PHP中的一个数据访问抽象层,它提供了一种统一的方式来连接和操作多种不同的数据库。在使用PDO进行查询数据库后,我们通常需要获取结果集并对其进行处理。本文将详细介绍如何使用PHP PDO获取结果集。

准备工作

在开始之前,请确保您的环境中已经安装了PDO扩展和相关数据库的驱动程序。您可以通过执行以下代码来检查是否已启用PDO:

<?php
phpinfo();
?>

在输出中搜索 "PDO",如果看到相关信息,则表示PDO扩展已成功安装。

连接数据库

首先,我们需要使用PDO建立与数据库的连接。以MySQL为例:

<?php
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'username';
$password = 'password';

try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
?>

在上面的代码中,我们使用DSN(Data Source Name)来指定数据库类型、主机和数据库名称。然后,我们创建一个PDO对象并传入相应的参数。如果连接失败,会抛出一个PDOException异常,我们可以在catch块中进行处理。

执行查询

连接成功后,就可以使用PDO执行SQL查询语句了:

<?php
$sql = 'SELECT * FROM users WHERE age > :age';
$sth = $dbh->prepare($sql);
$sth->execute([':age' => 18]);
?>

在这里,我们使用PDO的prepare()方法来准备SQL语句。然后,使用execute()方法执行查询。注意到了吗?我们使用占位符 :age 代替直接写入年龄值,这样可以防止SQL注入攻击。

获取结果集

PDO提供了多种方法来获取查询结果集:

fetch()方法

fetch()方法返回结果集中的下一行,并将数据作为数组或对象进行访问。默认情况下,它以关联和数字数组的形式同时返回两种类型的数组:

<?php
$row = $sth->fetch(PDO::FETCH_ASSOC); // 仅获取关联数组
print_r($row);
?>

fetchAll()方法

fetchAll()方法返回结果集中的所有行,并将数据作为多维数组进行访问:

<?php
$rows = $sth->fetchAll(PDO::FETCH_ASSOC); // 仅获取关联数组
print_r($rows);
?>

fetchColumn()方法

fetchColumn()方法返回结果集中的下一行的第一个字段值:

<?php
$name = $sth->fetchColumn();
echo $name;
?>

错误处理

在使用PDO进行数据库操作时,如果出现错误,可以通过errorCode()方法获取错误代码,并使用errorInfo()方法获取详细的错误信息:

<?php
if ($sth->execute() === false) {
    echo 'Error: ' . $sth->errorCode();
    print_r($sth->errorInfo());
}
?>

总结

本文详细介绍了如何使用PHP PDO获取查询结果集。我们首先建立与数据库的连接,然后执行SQL查询语句。最后,通过fetch()、fetchAll()和fetchColumn()等方法来获取结果集并进行处理。在使用PDO时,错误处理也是非常重要的,我们可以通过相关方法来获取详细的错误信息。