提问人:shuunenkinenbi 提问时间:1/30/2021 最后编辑:shuunenkinenbi 更新时间:2/28/2021 访问量:320
mysqli_fetch_object - 作为关联数组的变量
mysqli_fetch_object - variables as associative array
问:
使用 时,可以将对象的名称作为第二个参数传递。通过这样做,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()
答:
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;
}
}
评论
mysqli_fetch_array()