Php 使用foreach显示列中的所有行
我试图使用foreach来回显列中的每一行。但我得到: 警告:为foreach()提供的参数无效 这是我的密码:Php 使用foreach显示列中的所有行,php,pdo,foreach,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
<?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'];
}
} ?>
fetchColumn()不返回数组,因此无法对其进行foreach。您可以使用而不是:
while($val = $stmt->fetchColumn(2)) {
echo $val;
}
但请注意,如果您检索的是布尔字段,则此操作将失败。根据文件中的注释:
注:
PDOStatement::fetchColumn()不应用于检索布尔列,因为无法区分FALSE和
没有更多要检索的行。Use语句::fetch()
相反
更新后,代码并没有给您第一行,它只给了您一行,因为查询中有SUM()
函数:
SELECT COUNT(*), sum(price),part_number,location,price FROM products
请注意,将返回数值列的总和
因此,在您的情况下,您需要从查询中删除sum(price)
函数,然后才能获得所有行
为此,您可以使用PHP,例如:
$sum = 0;
while($val = $stmt->fetch()) {
$sum += $val['price'];
}
echo $sum; // will return sum of all rows.
print\u r($row)
u将了解它的工作方式display@devpro我换了$row;要打印r($row),这仍然会给我相同的结果,但我得到警告:为foreach()提供的参数无效,请尝试使用@marc-b执行相同的操作example@devpro这给了我这样的整个数组:Array([COUNT(*)]=>3[部件号]=>14124[位置]=>这里是town
我如何设置它,使它只显示part_number
列中的所有行?@devpro就是这样,总和对所有行进行了分组,这就是为什么我在循环中只得到了一行。非常感谢您的帮助!这清除了我收到的警告,它现在在切换到fetch后输出一个表示“Array”的值()我怎样才能让它回显列的行?@holodout:现在你可以改变打印($val)
$val
是一个数组,所以当你尝试回显数组时,它总是会给你数组(
:),我已经在注释测试中提到了这个例子fetch()是否返回数组…您确实需要学习如何读取文档,而不仅仅是盲目地返回代码。