Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQLi结果集上的PHP Foreach_Php_Mysql_Foreach - Fatal编程技术网

MySQLi结果集上的PHP Foreach

MySQLi结果集上的PHP Foreach,php,mysql,foreach,Php,Mysql,Foreach,我有这段代码,可以在本地XAMPP测试服务器上运行。问题是,当推送到生产服务器时,它会中断。这不是数据库连接的问题,而PHP/MySQL在生产服务器上都是5.3版本,因此这两个版本都不使用。我认为这是使用foreach循环,而不是更标准的while循环;如果是这样,为什么 <?php $res = $mysqli->query('DESCRIBE '.$table); $columnCount = 0; echo '<ul>'; 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>';
?>

编辑:澄清一下,它完全不输出任何内容;在循环中插入一个简单的echo语句时,它似乎甚至不执行它

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

改为这样做:

if ($result = $mysqli->query('DESCRIBE ' . $table)) {
    $columnCount = 0;
    echo '<ul>';

    /* fetch associative array */
    while ($field = $result->fetch_assoc()) {
        if (in_array($field["Field"], $sheetData[0])) {
            echo "<li>$field[Field] - $field[Type]</li>\r\n";
            $columnCount++;
        }
    }

    echo '</ul>';

    /* free result set */
    $result->free();
}
if($result=$mysqli->query('descripe'.$table)){
$columnCount=0;
回声“
    ”; /*获取关联数组*/ 而($field=$result->fetch_assoc()){ if(在数组中($field[“field”],$sheetData[0])){ echo“
  • $field[field]-$field[Type]
  • \r\n”; $columnCount++; } } 回声“
”; /*自由结果集*/ $result->free(); }
既然我很久以前问过这个问题,我想我应该用一些额外的澄清来更新它:我首先对foreach循环所做的工作确实有效。需要注意的是,它只在PHP5.4+中有效,因为类实现了接口。这意味着您可以在更高版本的PHP中使用foreach循环对其进行迭代


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

它是如何打破的?您从数据库返回了哪些错误?请检查
phpinfo
,确保启用了mysql扩展,并在数据库中添加一些错误检查code@andrewsi:我已经为这个问题添加了更多细节。@ManseUK:我已经检查过了,是的,MySQL已经启用。以前有错误检查,但现在它已被删除,以使此算法尽可能简单。您需要
$res->fetch_assoc()
。不能迭代结果资源,因为它不是数组。