You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PDO默认返回对象时,如何用预处理语句+遍历接口获取数组结果?

解决方案:修改PDOStatement的fetch模式

你只需要针对当前的PDOStatement对象设置单独的fetch模式,就能覆盖全局PDO连接的默认设置,这样遍历的时候就能得到数组,完全不需要类型转换。这里有两种简单的实现方式:

方法1:执行后设置fetch模式

在execute()之后,调用setFetchMode()指定PDO::FETCH_ASSOC,遍历statement时就会返回关联数组:

$stmt = $this->pdo->prepare($sql);
$stmt->execute($arr);
$stmt->setFetchMode(PDO::FETCH_ASSOC); // 为当前statement设置fetch模式
foreach($stmt as $rs) {
    // $rs现在是关联数组,而非stdObject
}

方法2:预处理时指定fetch模式

你也可以在调用prepare()时,通过第三个参数传入属性数组,直接设置当前statement的默认fetch模式:

$stmt = $this->pdo->prepare(
    $sql,
    [PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC]
);
$stmt->execute($arr);
foreach($stmt as $rs) {
    // $rs同样是关联数组
}

原理说明

PDO的全局连接配置是默认的fetch模式,但每个PDOStatement对象都可以拥有自己独立的fetch模式设置,优先级高于全局配置。当你遍历PDOStatement时,内部会自动调用fetch()方法,而这个方法会使用当前statement的fetch模式——这和你用query()方法时指定第二个参数的原理是完全一致的,只是预处理语句需要手动显式设置而已。

这样既保留了全局连接的默认设置,又能让当前的遍历得到数组,完全符合你的需求。

内容的提问来源于stack exchange,提问作者user1032531

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:34:33