我无法理解 1) PDOStatement 对象内部是什么,以及 2) 为什么我需要 fetch() 或 fetchAll() 方法。
我的数据库:一个名为“动物”的简单表格,包含 3 列(id、name、species)。
我的代码:
try {
$pdo = new PDO($dsn, $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
exit( $e->getMessage() );
}
try {
$sql = "SELECT * FROM animals";
$results = $pdo->query($sql);
print_r($results);
} catch (PDOException $e) {
echo $e->getMessage();
}
首先,print_r(或 var_dump)打印:PDOStatement Object ( [queryString] => SELECT * FROM animals )
但如果我这样写:
foreach($results as $row) {
echo $row['id'] . ' ' . $row['name'] . ' ' . $row['species'];
}
我的表格的每一个内容都被打印出来了。
那么 1)为什么 print_r 不显示任何该信息,如果它存在于我的对象中?
和
2) 为什么我需要$results->fetch()
或$results->fetchAll()
获取我已经从数据库中获取并且在结果集 $results 中的信息?