【问题标题】:Display all rows in column with foreach使用 foreach 显示列中的所有行
【发布时间】:2017-03-03 21:49:22
【问题描述】:

我正在尝试使用 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'];
}
}  ?>

【问题讨论】:

  • print_r($row) 你会知道它的显示方式
  • @devpro 我改变了 echo $row;到 print_r($row) 这仍然给我相同的结果,并且收到警告:为 foreach() 提供的参数无效
  • 用@marc-b 例子试试同样的东西
  • @devpro 这给了我这样的整个数组:Array ( [COUNT(*)] =&gt; 3[part_number] =&gt; 14124 [location] =&gt; here town 如何设置它以便它只显示part_number 列中的所有行?
  • @devpro 就是这样,SUM 正在对所有内容进行分组,这就是为什么我在循环中只得到一行。非常感谢您的帮助!

标签: php pdo foreach


【解决方案1】:

fetchColumn() 不返回数组,因此您不能对其进行 foreach。你改用while

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

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

注意:

PDOStatement::fetchColumn() 不应用于检索布尔列,因为无法区分 FALSE 值和 没有更多的行可以检索。使用 PDOStatement::fetch() 而是。

【讨论】:

  • 这清除了我收到的警告,它现在在切换到 fetch() 后输出一个显示“Array”的值。我怎样才能让它回显列的行?
  • @holodout: 现在你可以检查print_r($val) $val 是一个数组,所以当你尝试回显数组时,它总是会给你Array :) 我已经在评论测试中提到过用这个例子
  • fetch() 确实返回一个数组...您真的需要学习如何阅读文档,而不仅仅是盲目地反刍代码。
【解决方案2】:

更新后,代码没有给你第一行,它给你一行只是因为你的查询中的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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 2014-02-09
    • 2014-02-27
    • 2017-05-27
    • 2016-01-28
    相关资源
    最近更新 更多