我收到以下错误:
Invalid argument supplied for foreach()
代码如下:
<?php
$connection=mysqli_connect(/*hostname*/"localhost",
/*username*/"u",
/*password*/"p",
/*database name*/"d");
try {
// Setting the query and runnin it...
$sql = "SELECT * FROM `table` WHERE `category` = 5 ORDER BY 3";
$result = $connection->query($sql);
// Iterating over the data and printing it.
foreach($result as $row) {
echo $row['rowa']. ' - '. $row['rowb']. ' - '. $row['rowc']. ' - '. $row['rowd']. ' - '. $row['rowe'].'<br />';
}
// Closing the connection.
$connection = null;
}
// Catching it if something went wrong.
catch(PDOException $e) {
echo $e->getMessage();
} ?>
如何解决此错误,编码还有什么问题?
答案 0 :(得分:3)
基本上,您对foreach()
的使用是正确的。但是,它不能使用SQL查询返回的结果。
相反,您必须使用另一个循环,例如像这样的东西:
while ($row = function_taking_one_result($result)) {
// your own handling of $row
}
对于function_taking_one_result()
,您有一些内置函数调用以不同方式处理返回的结果(请参阅文档)。
您最有可能寻找的是mysqli_fetch_row()
,它将使用列名作为键并将行的数据作为值返回PHP数组。一旦没有任何进一步的结果(因此离开循环),此函数将返回FALSE
。
答案 1 :(得分:0)
以这种方式使用它:
foreach(mysqli_fetch_array($result) as $row) {
echo $row['rowa']. ' - '. $row['rowb']. ' - '. $row['rowc']. ' - '. $row['rowd']. ' - '. $row['rowe'].'<br />';
}
编辑:
$result = mysqli_query($connection,$sql);
if($result)
{
foreach(mysqli_fetch_array($result) as $row) {
echo $row['rowa']. ' - '. $row['rowb']. ' - '. $row['rowc']. ' - '. $row['rowd']. ' - '. $row['rowe'].'<br />';
}
}else{
echo "QUERY IS NOT OK";
}
答案 2 :(得分:0)
query()方法返回的资源标识符不是ARRAY。所以你不能循环非数组的东西。 foreach循环只能用于数组。
运行查询后,您需要获取数组中的数据,然后尝试在循环中运行它。 如果对db数组使用while()循环,那就更好了。
代表:
$sql = "SELECT * FROM `table` WHERE `category` = 5 ORDER BY 3";
$qry = $connection->query($sql); //Runs the query but wont fetch RESULT
// Iterating over the data and printing it.
while($row=$qry->fetch_array()) {
//or $qry->fetch_assoc(), $qry is the variable used to execute query. check above line
echo $row['rowa'].'-'. $row['rowb'].'-'.$row['rowc'].'-'.$row['rowd'].'-'.$row['rowe'].'<br />';
}