PDO fetchAll()给了我stdClass

时间:2018-04-28 09:10:45

标签: php pdo 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)

1 个答案:

答案 0 :(得分:4)

您可以使用PDO::FETCH_ASSOC代替PDO:FETCH_OBJ,它会直接返回一个关联数组。

有关更多选项,请参阅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);

编辑:添加了全局替代方案