使用PDO准备语句和遍历接口时如何指定fetch_style?

How do I specify the fetch_style when using a PDO prepared statement and the traversal interface?

我的pdo连接设置为return个标准对象,我可以使用遍历接口迭代结果如下:

$stmt=$this->pdo->prepare($sql);
$stmt->execute($arr);
foreach($stmt as $rs) {
    //$rs is a stdObject since the pdo connection is set up to return stdObjects
}

根据 http://php.net/manual/en/pdo.query.php,我可以指定 fetch_style 并类似地迭代结果如下:

$stmt = $pdo->query($sql, PDO::FETCH_ASSOC);
foreach($stmt as $rs) {
    //$rs is an array even though pdo connection is set up to return stdObject since I included `PDO::FETCH_ASSOC`
}

然而,我想要的是当我的 pdo 连接设置为 return 标准对象时使用准备好的语句,并使用遍历接口迭代结果和 return 数组:

$stmt=$this->pdo->prepare($sql);
$stmt->execute($arr);
foreach($stmt as $rs) {
    // pdo connection is set up to return stdObject.  What can be done to make $rs an array?
}

如何做到这一点?

请注意,类型转换为数组不是一个可接受的答案,因为首先不使用遍历接口会是更好的方法。

但是,说明不可能(如果为真)是可以接受的答案。

您的第一站应该始终是 PHP 手册 ~ PDOStatement::setFetchMode

$stmt=$this->pdo->prepare($sql);
$stmt->execute($arr);
$stmt->setFetchMode(PDO::FETCH_ASSOC);

foreach($stmt as $rs) {
    // $rs is an array
}

这将为特定的 PDOStatement 实例设置 fetch-mode,不会对以后的查询产生任何影响。