MySQLi结果集上的PHP Foreach

mob*_*emk 2 php mysql foreach

我有这段代码可以在本地XAMPP测试服务器上使用。问题是,当推送到生产服务器时,它会中断。这与数据库连接无关,PHP / MySQL在生产服务器上的版本都为5.3,因此这两个版本都不使用旧版本。我在想这是使用foreach循环而不是更标准的while循环;如果是那样,为什么?

<?php
   $res = $mysqli->query('DESCRIBE '.$table);
   $columnCount = 0;
   echo '<ul>';
   foreach($res as $field) {
     if(in_array($field["Field"], $sheetData[0])) {
      echo '<li>';
            //var_dump($field);
      echo $field['Field'].' - '.$field['Type'];
      echo "</li>\r\n";
      $columnCount++;
    }
  }
  echo '</ul>';
?>
Run Code Online (Sandbox Code Playgroud)

编辑:澄清一下,它根本不输出任何东西而中断;当在循环中插入一个简单的echo语句时,似乎甚至不执行它。

EDIT2:我在下面添加了一个答案,它详细介绍了这里的实际问题是什么以及为什么该代码在某些条件下确实可以工作。

mob*_*emk 5

因此,自从我很久以前问这个问题以来,我认为我应该这样说来更新它:我首先使用foreach循环所做的工作是可行的。需要注意的是,它仅在PHP 5.4+中有效,因为mysqli_result类实现了Traversable接口。这意味着您可以在更高版本的PHP中使用foreach循环对其进行迭代。

在我发布问题时(2013年年中),此更改显然并不为人所知,这可能是由于互联网上有如此多的服务器仍在使用5.3的原因-可能是因为这是Ubuntu可用的最新PHP版本12.x-将其实用程序限于最近更新的服务器。但是,当您处于支持它的环境中时,这是一种完全有效的技术。