【问题标题】:MySQLi returns an object but won't return results in foreach loopMySQLi 返回一个对象,但不会在 foreach 循环中返回结果
【发布时间】:2014-07-10 01:36:43
【问题描述】:

我有一个基本的 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 中重写了查询,并且能够从数据库中获取数据。

【问题讨论】:

  • 请提供您拥有的代码。
  • 发布您的代码,发布您遇到的错误。

标签: php mysql mysqli dev-to-production


【解决方案1】:

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

仅在 PHP 5.4 中添加了对 MySQLi_result 的迭代器支持,如果您的 PHP 版本早于该版本,则需要使用 fetch_assoc 以传统方式遍历这些结果:

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

【讨论】:

    【解决方案2】:

    您需要对结果进行实际操作,例如使用 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 结果。

    【讨论】:

      猜你喜欢
      • 2014-10-26
      • 2017-03-10
      • 2015-10-05
      • 2020-05-06
      • 2021-09-24
      • 1970-01-01
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      相关资源
      最近更新 更多