使用foreach显示列中的所有行

时间:2016-10-21 14:20:35

标签: php pdo foreach

我正在尝试使用foreach来回显列中的每一行。但是我得到了:

  

警告:为foreach()提供的参数无效

这是我的代码:

<?php
$user = user;
$pass = pass;
$dbh = new PDO('mysql:host=localhost;dbname=onlyaskf_registered', $user, $pass);

$stmt = $dbh->prepare("SELECT COUNT(*), sum(price),part_number,location,price FROM products WHERE code = :usercode");
$stmt->bindParam(':usercode', $_SESSION['MM_Username']);

?>

<?php 
if ($stmt->execute()) {
    foreach($stmt->fetchColumn(2) as $row) {
        echo $row;
    }
}  
?>

使用此代码,我可以获得列中的第一行:

<?php 
if ($stmt->execute()) {
    $row = $stmt->fetchColumn(2);
    echo $row;
}  
?>

第2列是我的part_number列,如果我像上面那样格式化我的php,它会给我该列的第一个行。如何使用foreach显示列中的每一行?这甚至可能还是有更好的方法来回显整列的行?

更新:

我将代码更改为此但它只给出了第一行的列值而不是每行:

<?php if ($stmt->execute()) {
while($val = $stmt->fetch()) { 
echo $val['part_number'];
}
}  ?>

2 个答案:

答案 0 :(得分:1)

fetchColumn()没有返回一个数组,因此你无法预测它。您改为使用while

while($val = $stmt->fetchColumn(2)) { 
    echo $val;
}

但请注意,如果您正在检索布尔字段,则会失败。根据文档中的说明:

  

注意:

     

PDOStatement :: fetchColumn()不应该用于检索布尔列,因为不可能将FALSE的值与   没有更多行要检索。使用PDOStatement :: fetch()   代替。

答案 1 :(得分:1)

更新后,代码没有给你第一行,它只是因为你的查询中有SUM()函数而给你一行:

SELECT COUNT(*), sum(price),part_number,location,price FROM products

请注意,SUM()将返回数字列的总和。

因此,在您的情况下,您需要从查询中删除sum(price)函数,而不是获取所有行。

您可以将PHP用于此目的,例如:

$sum = 0;
while($val = $stmt->fetch()) { 
    $sum += $val['price'];
}
echo $sum; // will return sum of all rows.