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