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);
编辑: 添加了全局替代项
我正在了解 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);
编辑: 添加了全局替代项