首页 > 解决方案 > mysqli_fetch_object - 作为关联数组的变量

问题描述

使用时mysqli_fetch_object(),您可以将对象的名称作为第二个参数传递。通过这样做,mysqli 会创建相应的对象并自动设置变量。

objectname {

// No defined properties

}

(...)

$object = mysqli_fetch_object($result, "objectname");

假设 $result 包含“forname”和“surname”的数据,我们现在可以访问:

$object->forename;
$object->surname;

是否可以将数据提取到关联数组中?就像这里显示的:

objectname {
    public $data = array();
}

(...)

$object = mysqli_fetch_object($result, "objectname");

然后有:

$object->data["forename"];
$object->data["surname"];

如果不是:MySQLi 用来填充对象的代码是什么mysqli_fetch_object()?考虑到 MySQLi 甚至能够更改预定义的私有变量,这对我来说完全是个谜。

标签: phpoopmysqli

解决方案


不幸的是,你不能用 mysqli 做到这一点。通常,我会在这种情况下推荐 PDO,但即使是 PDO 也没有这种能力。

不过有一个解决方法。您可以使用构造函数和私有属性创建自己的类。

class MyClass
{
    public function __construct(private array $data) {}
}

$stmt = $mysqli->prepare('SELECT id, name FROM users');
$stmt->execute();
$result = $stmt->get_result();

$data = [];
foreach ($result as $row) {
    $data[] = new MyClass($row);
}
var_dump($data);

在上面的代码中,我迭代结果集并创建一个新对象,每次都将行作为构造函数参数传递。您可以使用此方法控制属性的可见性。

PS 如果您使用的是 PHP 7,那么您可以这样定义类:

class MyClass
{
    private array $data;

    public function __construct(array $data)
    {
        $this->data = $data;
    }
}

推荐阅读