1

假设您有一个具有某些属性的类,并且您已尽力使这些属性与数据库中的列名匹配,从而使您可以将 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 对象属性的指针?

4

1 回答 1

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

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

于 2012-07-29T18:54:25.433 回答