gpt4 book ai didi

php - PDO结果集是如何存储的

转载 作者:可可西里 更新时间:2023-11-01 12:53:33 27 4
gpt4 key购买 nike

作为我的第一门脚本语言,我已经学习 PHP 两个月了。对于我的大部分问题,我都可以轻松地在网上找到答案,但有些关于 PDO 的东西我似乎无法理解。

为了从数据库中检索数据,我实例化了 PDO 类的一个新对象,并对其调用了 PDO::query() 方法。这将返回一个 PDOStatement 对象,该对象携带 SQL 查询的结果集。这就是问题开始的地方。我似乎无法理解结果集中数据的存储方式和存储位置。

在 PHP 手册中,我学会了通过使用 foreach 循环迭代 PDOStatement 对象 来显示返回的行。但是,PHP 手册明确指出,如果将对象转换为数组,则结果是一个数组,其元素是对象的属性。 PDOStatement 只有一个属性 - $queryString - 包含发出的查询字符串。那么...查询结果存储在哪里?为什么我可以通过带有 foreach 循环的数组访问它们,而不是在它之外?

// Instantiate new PDO object to establish a new connection with MySQL database
$db = new PDO('mysql:dbhost=localhost;dbname=world', 'root', 'secret');

// Execute SQL query - Returns a PDOStatement object
$result = $db->query("SELECT Name, Continent, Population FROM Country");


// Result set can be accessed with a foreach loop iterating over the PDOStatement object
foreach ($result as $row) {
echo "$row[Name] - $row[Continent] - $row[Population] <br />";
}

// Outside the foreach loop, $result cannot be accessed this way.
// This produces 'Cannot use object of type PDOStatement as array'
echo $result[0]['Name'];

最佳答案

PDOStatement 类实现了 Iterator interface ,它可以迭代其对象。

Iterator extends Traversable {
/* Methods */
abstract public mixed current ( void )
abstract public scalar key ( void )
abstract public void next ( void )
abstract public void rewind ( void )
abstract public boolean valid ( void )
}

对于一个实现了Iterator接口(interface)的对象,

foreach($result as $row) {
// Code
}

相当于

for ($result->rewind(); $result->valid(); $result->next()) {
$row = $result->current();
// Code
}

关于php - PDO结果集是如何存储的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10923856/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com