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

用php返回的pdo语句应该打印什么?

php
  •  3
  • johnny  · 技术社区  · 14 年前
    $dbh = new PDO ("sqlite:/Library/WebServer/Documents/nwind2009.db3");
    $sql = "SELECT * FROM Customers";     
    print_r($dbh->query($sql));
    

    这将返回:

    pPostStatement对象([QueryString]=>从客户中选择*)

    但如果我这样做:

     foreach ($dbh->query($sql) as $row) {
        echo $row['CompanyName'];
     }
    

    我得到数据。

    为什么不打印或显示数据库结果?前臂发生了什么特别的事?我以为print_r向我展示了阵列,这就是我在前臂所做的。

    谢谢。

    3 回复  |  直到 9 年前
        1
  •  4
  •   FlorianH    14 年前

    如果您迭代查询,它将自动获取数据。这是一件好事,因为适配器在实际需要数据时会延迟加载数据。

    如果要强制PDO适配器提前获取数据,可以运行 fetchAll 方法如下:

    $dbh = new PDO ("sqlite:/Library/WebServer/Documents/nwind2009.db3");
    $sql = "SELECT * FROM Customers";       
    print_r($dbh->query($sql)->fetchAll());
    
        2
  •  3
  •   Wrikken    14 年前

    PDOStatement 是存储在“普通”PHP代码之外的资源的可ITerable接口。结果集不是在PHP级别实现的,根据设置的不同,它甚至是一个问题:该结果集是存在于PHP进程的内存中,还是存在于数据库服务器的内存中。一 foreach 它实际上会调用对资源的多次提取,而您不知道(或不应该关心)结果集在内存中的位置是一件好事。

    如果仍需要用于调试的表示,则可以调用 var_dump($stmt->fetchALL());

        3
  •  0
  •   Andreas Grapentin Niels Castle    9 年前

    查询返回一个数组/对象和 print_r() 显示结果,添加 <pre> 标记并将true传递给 打印 在HTML页面上显示此内容时更容易阅读

    echo "<pre>".print_r($dbh->query($sql)->fetchAll(),true)."</pre><br />";