Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用foreach显示列中的所有行_Php_Pdo_Foreach - Fatal编程技术网

Php 使用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

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

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()是否返回数组…您确实需要学习如何读取文档,而不仅仅是盲目地返回代码。