Php 第二个while循环未运行。为什么?
我有两个while循环一个接一个地运行(不是在彼此内部)——我对代码进行了一些简化,因此下面只列出了其中的重要部分。当我比较两个回显查询时,问题就出现了,因为第二个while循环显然根本没有运行 我在某个地方读到有人用for循环来解决第二个问题,但我想弄清楚为什么第二个while循环没有在我的代码中运行Php 第二个while循环未运行。为什么?,php,loops,while-loop,Php,Loops,While Loop,我有两个while循环一个接一个地运行(不是在彼此内部)——我对代码进行了一些简化,因此下面只列出了其中的重要部分。当我比较两个回显查询时,问题就出现了,因为第二个while循环显然根本没有运行 我在某个地方读到有人用for循环来解决第二个问题,但我想弄清楚为什么第二个while循环没有在我的代码中运行 $query_work_title = "SELECT title FROM works WHERE "; while ($row = mysql_fetch_assoc($result_wor
$query_work_title = "SELECT title FROM works WHERE ";
while ($row = mysql_fetch_assoc($result_work_id)) {
$query_work_title .= "OR '$work_id' ";
}
echo $query_work_title;
echo '<br />';
$result_work_title = mysql_query($query_work_title) or
die(mysql_error($cn));
// retrieve the authors for each work in the following query
$query_author_id = "SELECT author_id FROM works_and_authors WHERE ";
while ($row = mysql_fetch_assoc($result_work_id)) {
$query_author_id .= "work_id = 'hello' ";
}
echo $query_author_id;
$query\u work\u title=“从工作中选择标题”;
while($row=mysql\u fetch\u assoc($result\u work\u id)){
$query_work_title.=“或'$work_id'”;
}
echo$query\u work\u title;
回声“
”;
$result\u work\u title=mysql\u query($query\u work\u title)或
die(mysql_错误($cn));
//检索以下查询中每个工作的作者
$query\u author\u id=“从works\u和\u authors WHERE中选择author\u id”;
while($row=mysql\u fetch\u assoc($result\u work\u id)){
$query\u author\u id.=“work\u id=‘hello’”;
}
echo$query\u author\u id;
mysql\u fetch\u assoc逐步完成结果,对吗?它已经在第二个while循环的末尾,所以它什么也不做。您已经循环了结果行,所以它在末尾并返回FALSE
。(这就是它第一次退出循环的原因。)
要重置指向结果集开头的内部指针,请使用
根据您发布的代码,您的SQL将类似于:
从works WHERE或“1”中选择标题
该查询将导致错误,因此您的脚本不应超过该点
即使如此,您的第二个循环:
while($row=mysql\u fetch\u assoc($result\u work\u id))
正在使用已由第一个循环完全迭代的结果句柄。当第二个循环尝试使用它时,mysql\u fetch\u assoc
将返回FALSE
,因为没有更多的行要获取。这将导致第二个循环立即退出
如果两个
while
循环都需要访问相同的行,则组合它们的逻辑,这样这些行只需要迭代一次。MySQL扩展跟踪每个结果的内部行指针。它在每次调用mysql_fetch_assoc()后递增该指针,并且允许您使用while循环,而无需指定何时停止。如果要在结果集中循环多次,则需要将此内部行指针重置回0
要执行此操作,请在第一个循环之后执行以下操作:
while ($row = mysql_fetch_assoc($result_work_id)) {
$query_work_title .= "OR '$work_id' ";
}
mysql_data_seek($result_work_id, 0);
在第一个
while()
循环完成后,MySQL结果中的内部指针位于其自身的末尾。您需要在第一个循环和第二个循环之间告诉它返回到开始:
mysql_data_seek($result_work_id, 0);
您已经到达结果集的末尾,但是可以使用
mysql\u data\u seek
重置它
// query your database
$result = mysql_query(...);
// loop through results
while(($row = mysql_fetch_assoc($result))) {
}
// reset result set
mysql_data_seek($result,0);
// loop again
while(($row = mysql_fetch_assoc($result))) {
}
// query your database
$result = mysql_query(...);
// loop through results
while(($row = mysql_fetch_assoc($result))) {
}
// reset result set
mysql_data_seek($result,0);
// loop again
while(($row = mysql_fetch_assoc($result))) {
}