【问题标题】:returning multiple rows from postgre PDO从 postgres PDO 返回多行
【发布时间】:2013-02-12 18:18:46
【问题描述】:

这个 PHP postgreSQL PDO 语句没有返回任何结果。我预计会看到几行。我做错了什么?如何检索它们并将它们放入对象或数组中?

$sth = $dbh->prepare('SELECT * FROM address');
$sth->execute();

$result = $sth->fetch(PDO::FETCH_ASSOC);
while($row = $sth->fetch()) {  
    echo $row['StreetAddress1'] . "\n";
} 

【问题讨论】:

    标签: php pdo


    【解决方案1】:

    将结果集视为一个堆栈,每个 fetch() 调用都会弹出一个结果行。您在 while 循环之外调用了一次 fetch,然后显然丢弃了 $result。这意味着一行结果数据消失了。至于将它们放入对象/数组中,这取决于您。可以很简单:

    $addresses[] = $row['StreetAddress1']
    

    在循环内部。


    要么

    while($row = $sth->fetch()) {
       ...
    }
    
    -- or --
    
    $rows = $sth->fetchAll();
    foreach($rows as $row) {
        ...
    }
    

    【讨论】:

    • 谢谢。我不明白 fetch() 应该如何放在 while 循环中(?)
    • 我明白了。但是,foreach($result as $key=>$val) { echo $val . "\n"; } 只显示Array Array。而foreach($result as $key=>$val) { echo $val['StreetAddress1'] . "\n"; } 什么也不显示。 :/ 我还是看不到数据..
    【解决方案2】:

    $result = $sth->fetchAll();

    $result 将是一个包含所有结果的数组。

    然后使用foreach 循环。

    foreach

    【讨论】:

    • foreach($result as $key=>$val) { echo $val;} 只是给我Array Array,而foreach($result as $key=>$val) { foreach($val as $k=>$v){ echo $v . "<br>"; } } 将第一行数据打印两次(表中的行数)。我该如何纠正?谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-07-24
    • 2014-09-21
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2021-11-05
    • 2019-08-03
    • 2017-04-17
    相关资源
    最近更新 更多