如何存储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?