将数据库信息检索到类的有效方式


Efficient way of retrieving database info to a class

假设您有一个具有某些属性的类,并且您已尽最大努力使这些属性与数据库中的列名相匹配,从而可以将数据库的每一行都放入类对象中。

我通常这样做的方法是创建一个方法$class->get_all()来查询数据库中与特定查询匹配的所有行。然后,从资源集中,我用mysql_fetch_object($resource)创建了几个sql对象,并将它们存储在一个数组中,然后返回。基本上这样的事情经常发生:

<?php 
    while($row = mysql_fetch_object($result_set)){
        $class->id = $row->id;
        $class->name = $row->name;
        $class->birthdate = $row->birthdate;
        $output[] = $class;
    }
    return $output;
?>

这意味着我有两个具有相同属性的对象($row和$class),并且我正在将其中一个复制到另一个中。

有没有优化的方法?比如,与其将值从一个复制到另一个,不如将它们设置为指向相同sql对象属性的指针?

带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.
        */
    }

注意:这是一个简化的示例。在生产代码中,您可能需要考虑用户输入,在这种情况下,您将使用准备好的语句。这不会改变获取结果的方式。