MySQLi返回一个对象,但不会在foreach循环中返回结果

时间:2014-05-21 12:06:45

标签: php mysql mysqli dev-to-production

我有一个基本的MySQLi查询,它返回一个MySQLi对象并在foreach();中循环它以显示我的数据库中的数据转储。当我在本地运行PHP 5.5.9进行测试时,一切都很好,但是当我把它放在运行PHP 5.3.3的远程生产服务器上时,它将返回var_dump中的对象,但它不会遍历结果并显示它们。

以下是代码:

if ($mysqli->connect_errno) {
echo "There was an error";
     } else {

          if ($result = $mysqli->query("SELECT * FROM acronyms")) {

     }
       else {

    echo "query error";

     }

     foreach($result as $x=>$y) {
         echo $y["definition"];
     }
}       

?>

似乎mysqli安装在我的生产服务器上,但不会在我的测试服务器中的相同文件中循环。

我还在常规MySQL中重写了查询,并且能够从数据库中获取数据。

2 个答案:

答案 0 :(得分:1)

MySQLi->query在成功检索结果集时返回MySQLi_result类。

Iterator对MySQLi_result的支持仅在PHP 5.4中添加,如果您的PHP版本早于使用fetch_assoc以传统方式遍历这些结果所需的版本:

while($y = $result->fetch_assoc()) {
    echo $y["definition"];
}

答案 1 :(得分:0)

您需要对结果执行某些操作,例如使用fetch_assoc()来整合结果。

$mysqli = new mysqli("localhost", "name", "pw", "db");

if ($mysqli->connect_errno) {
  echo "There was an error";
}
else {

  if ($result = $mysqli->query("SELECT * FROM acronyms")) {
  }
  else {
    echo "query error";
  }

  while ($row = $result->fetch_assoc()) {
    echo $row["definition"];
  }

}

注意while ($row = $result->fetch_assoc()) {这是一个相当标准的方法,用于滚动MySQLi结果。