PDO fetchAll() 给我 stdClass

PDO fetchAll() gives me stdClass

我正在了解 PHP blob,但我在获取的数据方面遇到了问题。

注意:未定义属性:stdClass::$

当我在 foreach 循环中回显列名时,我的结果得到了这个

$sql = "SELECT * FROM tbl_blobs";

$stmt = $db->prepare($sql);
$stmt->execute();
$stmt->bindColumn(1, $name);
$stmt->bindColumn(2, $mime);
$stmt->bindColumn(3, $data, PDO::PARAM_LOB);

$arr = [];

$items = $stmt->fetchAll(PDO::FETCH_OBJ);

foreach ($items as $item) {
    echo $item->name;
}

我是否需要使用函数来包装结果,或者我是否遗漏了一个步骤?

期望的结果: => 将所有项目都放在一个数组中,以便将其编码为 JSON 字符串。其中一项是 blob。

数组输出使用var_dump($items);

array(5) { [0]=> object(stdClass)#3 (4) { ["ID"]=> string(1) "1" ["NAME"]=> string(7) "test123" ["IMAGE"]=> string(17861) (followed by a blob)

您可以使用 PDO::FETCH_ASSOC 而不是 PDO:FETCH_OBJ 它会直接 return 一个关联数组。

有关更多选项,请参阅 fetchAll 个参数

为整个 PDO 实例设置它

如果您希望 PDO 连接中的所有查询都具有此行为,您可以将其设置为:

$db = new \PDO('mysql:host='.$dbhost.';dbname='.$dbname, $dbusername, $dbpassword, [
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]);

另一种在 PDO 实例化后设置它的方法,使用:

$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

编辑: 添加了全局替代项