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