假设你有一个具有某些属性的类,并且你已经尽力了,所以这些属性将匹配数据库中的列名,这样你就可以将db的每一行都放入类对象中。
我通常这样做的方法是创建一个方法$class->get_all()
来查询数据库中与特定查询匹配的所有行。然后,我从资源集创建几个sql对象,使用mysql_fetch_object($ resource)并将它们存储在一个数组中,然后返回该数组。基本上这样的事情通常会发生:
<?php
while($row = mysql_fetch_object($result_set)){
$class->id = $row->id;
$class->name = $row->name;
$class->birthdate = $row->birthdate;
$output[] = $class;
}
return $output;
?>
...这意味着我有2个对象($ row和$ class),具有相同的属性,我将其中一个复制到另一个。
有没有办法优化这个?比如,不是将值从一个复制到另一个,而是将它们设置为指向同一sql对象属性的指针?
答案 0 :(得分:2)
使用PDO:
<?php
$pdo = new PDO("mysql:host=localhost;dbname=database_name", "user", "pass");
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt = $pdo->query("SELECT `id`, `username`, `password` FROM `whatever`");
while ($class = $stmt->fetchObject("YourClassNameHere")) {
/*
* $class now holds an object of type YourClassNameHere
* With all properties set properly.
*/
}
注意:这是一个简化的示例。在生产代码中,您可能需要考虑用户输入,在这种情况下,您使用预准备语句。这不会改变您获取结果的方式。