代码之家  ›  专栏  ›  技术社区  ›  user1032531

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

  •  2
  • user1032531  · 技术社区  · 7 年前

    我的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
    }
    

    http://php.net/manual/en/pdo.query.php ,我可以对结果指定fetch_样式和类似的itterate,如下所示:

    $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?
    }
    

    怎么能做到?

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

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   Phil    7 年前

    你的第一站应该是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 实例,不会对将来的查询产生任何影响。

    推荐文章