PHP面向对象编程:如何将数据库行作为对象获取?

4

当选择单行时,我可以做到这一点,但是对于多行数据,我还无法完全理解如何做到这一点。

对于单行,我只需实例化一个新对象,在幕后执行许多操作,基本上从数据库中生成我们的对象的一行。

示例:

$object = new Classname($param);
foreach($object->row as $key=>$value) {
    echo $key.":".$value."\n";
}

//output
id:1
firstname:steve
lastname:took
etc...

有没有聪明的人能给我指点一下,请?

注意:我只想为每一行创建一个对象,而不是一个带有嵌套数组的对象。

编辑:抱歉,$object->row是存储从数据库中选择的行的类的成员。


嗯?有什么问题吗?此刻$object->row包含什么内容? - Naftali
抱歉,$object->row是存储从数据库中选择的行的类的成员。 - Steve Took
那么$object->row是一个包含关联数组的数组成员,你想将其转换为对象?问题在于,无论你做什么,你都要处理数组,所以我不明白为什么你要把它全部转换成对象。 - Michael J.V.
4个回答

6
如果我理解正确,答案很简单:mysql_fetch_object 示例:
while ($row = mysql_fetch_object($result)) {
    echo $row->user_id;
    echo $row->fullname;
}

0

这是一个例子

class users extends db {

    public $users_id = 0;
    public $users_group = 0;
    public $users_firstname = 0;
    public $users_lastname = 0;

    public function open($id) {
        if (is_numeric($id)) {
            $sql = "SELECT * FROM users WHERE users_id = '$id'";
            $res = parent::DB_SELECT($sql);
            if (mysql_num_rows($res) <> 1) {
                return 0;
            }
        } else {
            $sql = "SELECT * FROM users " . $id;
            $res = parent::DB_SELECT($sql);
            if (mysql_num_rows($res) <= 0) {
                return 0;
            }
        }


        $data = array();
        while ($row = mysql_fetch_array($res)) {
            $this->users_id = $row['users_id'];
            $this->users_group = $row['users_group'];
            $this->users_firstname = $row['users_firstname'];
            $this->users_lastname = $row['users_lastname'];
            $data[] = (array) $this;
        }
        return $data;
    }

    public function setUsersId($users_id) { $this->users_id = addslashes($users_id); }
    public function getUsersId() { return stripslashes($this->users_id); }

    public function setUsersGroup($users_group) { $this->users_group = addslashes($users_group); }
    public function getUsersGroup() { return stripslashes($this->users_group); }

    public function setUsersFirstname($users_firstname) { $this->users_firstname = addslashes($users_firstname); }
    public function getUsersFirstname() { return stripslashes($this->users_firstname); }

    public function setUsersLastname($users_lastname) { $this->users_lastname = addslashes($users_lastname); }
    public function getUsersLastname() { return stripslashes($this->users_lastname); }
}

1
这是一个面向对象的PHP编程,用户将作为表格存在,因此创建了一个同名的类。您可以通过 $users = new Users(); 实例化它。数据库是一个顶级类,包含与数据库通信的方法。DB_SELECT 几乎返回 mysql_query($sql, $connection) 的结果。 - Eric Herlitz
1
@yes123,那“useless”怎么办?把表格放在单独的类中真是太棒了。 - Eric Herlitz
@yes123,这是一个强类型类(你可能已经知道了),在这种情况下,我只是跳过了数据类型定义。如果我调用父方法DB_SELECT,那又怎样呢?这只是一行代码而已,放轻松。 - Eric Herlitz
1
@yes123,对某人宣称他们的“代码真是糟糕透了”是极其无礼的。你需要花些时间阅读FAQ,特别是“友善待人”的部分。 - Kirk Woll

0

你可以使用MySQLi。

// 连接
$db = new mysqli('主机', '用户', '密码', '数据库');
// 查询 $users = $db->query('SELECT * from users');
// 循环 while($user = $users->fetch_object()) { echo $users->field; }
// 关闭 $users->close(); $db->close();

更多信息请参见:http://php.net/manual/en/book.mysqli.php


0

谢谢 DS,我认为这会解答问题。 - Steve Took
谢谢您的投票 :) 试试这些库,至少Doctrine:非常棒! - Dmitri Sologoubenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接