【发布时间】:2015-03-03 17:47:42
【问题描述】:
我在尝试运行此脚本时遇到了一些麻烦:
<?php
$mysqli=new mysqli("localhost","root","mysqlpassword","MarcTextOldBib");
if (mysqli_connect_errno()) {echo "Failed to connect to MySQL: " . mysqli_connect_error();}
$db_abfrage = "SELECT `cid` , `field_data` FROM T1xx" ;
$j=0;
$db_ausgabe = $mysqli->query($db_abfrage);
while($row = $db_ausgabe->fetch_object()){
$names[$j] = array( "cid" => $row->cid,
"field_data" => $row->field_data,
);
$j++;
}
$mysqli->close();
echo"
<table border='1'>
<thead><tr>
<th>ID</th> <th>Name</th>
</tr></thead>";
$ID=1;
$size = count($names);
for ( $i = 0; $i <= $size; $i++ ){
$cid = $names[$i][cid];
echo "<tr>";
while( $ID != $names[$i][cid] ) {
echo "<td>".($ID)."</td>";
echo "<td></td>";
echo "</tr>";
$ID++;
}
if( ($ID) == $names[$i][cid] ) {
echo "<td>" . ($ID) . "</td>";
echo "<td>" . $names[$i][field_data] . "</td>";
echo "</tr>";
$ID++;
}
}
echo "</table>";
?>
当我将 for 循环设置为仅“50”而不是 count($names) 时,它就像魅力一样。但是当使用 count($names) 时,我的计算机完全冻结了。 count($names) 是 2788。
【问题讨论】:
-
在 Web 应用程序中返回那么多行显然是低效的
-
您返回多少数据?
field_data包含什么类型的数据?例如,如果它类似于包含 tinyints 的列,则其他内容可能是错误的。如果是每行包含 2mb 的文本字段,你会感到惊讶吗? -
是 while( $ID != $names[$i][cid] ) { 意思是 while( $ID != $names[$i]['cid'] ) { ?这个while循环也可能是无限的,因此会冻结,也许有这种情况发生在50之后的$row?
-
首先你的代码中有无限循环,所以检查我的答案并一起修复:-)
标签: php mysql arrays for-loop freeze