查询结果可以被取出并放到基于自定义类的对象里。例如,如果我们有一个类,命名为 ExampleClass,下面的查询将返回 ExampleClass 类型的对象。
<?php
$result = db_query("SELECT id, title FROM {example_table}", array(), array(
'fetch' => 'ExampleClass',
));
?>如果自定义类有一个 __construct() 方法,对象会被创建,属性会被添加到对象,然后 __construct() 方法会被调用。例如,如果你有如下的类和查询语句:
<?php
class ExampleClass {
function __construct() {
// Do something
}
}
$result = db_query("SELECT id, title FROM {example_table}", array(), array(
'fetch' => 'ExampleClass',
));
?>查询结果对象会被创建,id 和 title 属性被添加到对象,然后执行 __construct()。这个执行顺序是因为 PHP 5.2 以前版本的一个bug。
如果 __construct() 方法需要在属性值添加到对象之前被执行,下面的代码告诉你如何来做:
<?php
$result = db_query("SELECT id, title FROM {example_table}");
foreach ($result->fetchAll(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'ExampleClass') as $record) {
// Do something
}
?>传递给 fetchAll 的参数和传递给 fetch 的参数一样。PDO::FETCH_CLASS 告诉 fetchAll 将结果集里的记录值作为类 ExampleClass (第二个参数)的对象的属性。PDO::FETCH_PROPS_LATE 告诉 fetchAll 在 __construct() 执行之后将结果作为属性值添加到对象。