作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
也可以把查询的结果存放在自定义类的对象中去。例如,如果我们有一个名为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()。这些事件的执行顺序,是由低于PHP5.2的PHP版本中的一个bug(http://bugs.php.net/bug.php?id=46139)引起的。
如果该对象上有一个__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(),然后再将结果集作为属性添加到对象上。