如何通过PHP PDO中的foreach循环从myslq表中获取所有行

时间:2018-10-24 14:59:34

标签: php mysql pdo

我正在尝试从mySql数据库表中收集所有行。但是我得到的行比原始行少1行。假设该表有3行,但我正在获取2行数据。我总是很想念第一个。这是我桌子的图像。

这是我的代码:

$query = $db->query("SELECT * FROM `POS_refund`");

if($query->fetchColumn() > 0){

     foreach($query as $row){

        echo $get_prod_id = $row['prod_id'];

        $get_prod_qnt = $row['qnt'];

    } 

}

哪里出问题了?

2 个答案:

答案 0 :(得分:2)

PDOStatement::fetchColumn从结果集的下一行返回

在您的情况下,您应该使用fetch()fetchall()

<?php

$query = $db->query("SELECT * FROM `POS_refund`")->fetchall();

foreach($query as $row){

    echo $get_prod_id = $row['prod_id'];

    $get_prod_qnt = $row['qnt'];

} 
?>

如果您想查看是否返回了记录,则可以使用count(),因为fetchall()返回了数组,那么只需计算数组元素即可。

<?php

$query = $db->query("SELECT * FROM `POS_refund`");
$results = $query->fetchall();

if(count($results) > 0){
     foreach($results as $row){

        echo $get_prod_id = $row['prod_id'];

        $get_prod_qnt = $row['qnt'];

    } 

}else{

    echo "No results";
}

?>

答案 1 :(得分:-1)

我会使用while循环。看起来像这样:

while ($row = $query->fetchall) {
    echo $get_prod_id = $row['prod_id'];

    $get_prod_qnt = $row['qnt'];
}