php - 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 甚至能够更改预定义的私有变量,这对我来说完全是个谜。
解决方案
不幸的是,你不能用 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;
}
}
推荐阅读
- python - 如何在 python 3.7 中加密和解密字符串?
- python - 具有触摸屏功能的图像注释工具
- ios - Cocoapod 安装后未找到代码签名
- html - 滑动卡间距问题
- c# - Assert.True 没有通过测试
- animation - Flutter - 如何拥有任意数量的隐式动画
- python - 如何在 django sqlite db 中上传创建的 xml 文件
- c# - 异步数据加载但 UI 变得无响应 WPF
- azure - 在 MVC 应用程序中添加 Azure Active Directory 用户
- javascript - 错误:用户 'postgres'@'localhost' 的访问被拒绝(命令行)