mysqli_fetch_object - 作为关联数组的变量

mysqli_fetch_object - variables as associative array

提问人:shuunenkinenbi 提问时间:1/30/2021 最后编辑:shuunenkinenbi 更新时间:2/28/2021 访问量:320

问:

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

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甚至能够更改预定义的私有变量,这对我来说完全是一个谜。mysqli_fetch_object()

php oop mysqli

评论

0赞 Nigel Ren 1/30/2021
您能否澄清一下您的追求,因为由于人们认为存在误解,已经删除了一些答案。您是否想知道代码如何访问私有变量,如何将结果集作为数组返回?
0赞 Dharman 1/30/2021
@NigelRen 目标是获取一个对象,其中数据作为数组,该数组是对象的一个属性。
0赞 Nigel Ren 1/30/2021
所以这不就是 - 后跟分配给对象(构造函数或其他)吗?mysqli_fetch_array()
0赞 Matthew Swallow 1/30/2021
如果我错了,请纠正我,但我认为这样做的唯一方法是创建一个对象,然后执行:-----------“$object->data = mysqli_fetch_assoc($result)” 基本上就像@NigelRen刚才所说的那样,创建对象并将 assoc 数组分配给它
2赞 Nigel Ren 1/30/2021
@Dharman,传递给构造函数或集合方法将允许控制数据的范围。我的观点是,如果当前的答案误解了这个问题,我想尝试澄清它以帮助添加有用的答案(希望如此)。

答:

1赞 Dharman 1/30/2021 #1

不幸的是,你不能用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);

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

P.S. 如果你使用的是 PHP 7,那么你可以这样定义类:

class MyClass
{
    private array $data;

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