如何存储PDO结果集

作为我的第一个脚本语言,我已经学习了PHP 2个月。 对于我的大部分问题,我都可以在网上轻松找到答案,但有一些关于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接口,该接口允许迭代其对象。

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接口的对象,

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

相当于

for ($result->rewind(); $result->valid(); $result->next()) {
    $row = $result->current();
    // Code
}
链接地址: http://www.djcxy.com/p/71965.html

上一篇: How is a PDO result set stored

下一篇: PDO + MySQL always returns strings, but what about MsSQL?