Php 在使用PDO准备语句和遍历接口时,如何指定fetch_样式?

Php 在使用PDO准备语句和遍历接口时,如何指定fetch_样式?,php,pdo,prepared-statement,Php,Pdo,Prepared Statement,我的pdo连接设置为返回标准对象,我可以使用遍历接口对结果进行迭代,如下所示: $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 } $stmt = $pdo->query($sql, PDO::FETC

我的pdo连接设置为返回标准对象,我可以使用遍历接口对结果进行迭代,如下所示:

$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
}
$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`
}
根据,我可以指定fetch_样式,并对结果进行类似的跟踪,如下所示:

$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
}
$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连接以返回标准对象时使用一条准备好的语句,并使用遍历接口迭代结果和返回数组:

$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
实例设置获取模式,并且不会对将来的查询产生任何影响。

因此,我是否了解您的
ATTR_DEFAULT_fetch_模式是
fetch_OBJ
但您希望仅在迭代什么是声明对象?有趣的问题,我不确定不扩展PDO或在迭代之前手动更改获取模式是否可行。@MichaelBerkowski是的,您理解正确。如果过于复杂,使用
while
循环
fetch()
并不是世界末日,我当然可以这样做。然而,我确实希望在可能的情况下保持一致,如果可以的话,我会直接用
query($sql,PDO::FETCH_ASSOC)
。RTFM~@Phil这是否需要设置它,执行查询,然后再设置回去?如果是这样的话,我相信一开始就不尝试使用遍历接口将是一个更好的解决方案。我真的不知道你说的“将其设置回”是什么意思。设置被隔离到
pdo语句
实例谢谢。请看我对你评论的回应。另外,我没有考虑过使用
PDOStatement::setFetchMode
,再次感谢,但仍然没有达到最大化一致性和最小化错误几率的总体目标。我真的不明白你的问题啊,我现在明白了(一开始应该明白)它是如何应用于所讨论的语句的。因此,我觉得这是一个合理的做法。谢谢