如何在php中使用foreach()?

时间:2014-05-10 07:09:12

标签: php mysql sql

我收到以下错误:

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();
} ?>

如何解决此错误,编码还有什么问题?

3 个答案:

答案 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 />';
  }