我有:
$query = mysql_query("SELECT ... ");
while($row = mysql_fetch_array($query)) { first time used; }
...
while($row = mysql_fetch_array($query)) { second time used; }
第二次它不起作用。为什么呢?
答案 0 :(得分:6)
MySQL结果资源有一个内部指针,就像PHP数组一样,当你运行一次时,指针就在最后。您可以使用mysql_data_seek()
重置数据指针:
while ($row = mysql_fetch_array($query)) {
// First time used
}
mysql_data_seek($query, 0);
while ($row = mysql_fetch_array($query)) {
// Second time used
}
... 但可以说是更好/更“标准”的方法是通过指针运行一次,将结果存储在临时数组中,然后你可以释放由结果并将数据循环为数组:
// Do the query
$query = mysql_query("SELECT ... ");
// Cache the results in an array
$results = array();
while ($row = mysql_fetch_array($query)) {
$results[] = $row;
}
// Free the result resource
mysql_free_result($query);
foreach ($results as $row) {
// First time used
}
foreach ($results as $row) {
// Second time used
}
作为旁注,使用mysql_fetch_assoc()
或mysql_fetch_row()
提高资源效率 - 几乎每个用例只调用mysql_fetch_assoc()
,为索引键索引的情况非常罕见MySQL结果,甚至不太常见,你需要索引和关联。
答案 1 :(得分:1)
它第二次无效,因为您已经检索了所有行。因此它返回false。
答案 2 :(得分:0)
mysql_data_seek($query,0)
答案 3 :(得分:0)
您已经检索了所有行,因此您必须运行另一个查询,或者您可以将第一个循环中的值推送到数组中,然后在第二次输出该数组时显示相同的数据。 / p>
或者使用mysql_data_seek()