我通常会尝试尽可能减少对MySQL的调用,但我终于遇到了必须在单个脚本中对MySQL进行多次调用的情况。
看起来你不能在一个脚本中使用mysql_fetch_assoc
两次(!)。
似乎mysql_data_seek是解决方案,但我似乎无法让它工作。
要清楚,我需要提出两个问题。第二个查询取决于第一个查询的结果......这是结构:
$result = mysql_query($query1); while($row = mysql_fetch_assoc($result)){ $pos = $row['position']; } mysql_free_result($result); // result freed per comment below. $query2 = ' '; //... dependent on $pos - in mysql shell this returns results! $result2 = mysql_query($query2) while($row = mysql_fetch_assoc($result2)){ echo $row['id']; }
上面发生的是第二个while循环没有返回结果,即使查询应该有非常重要的行。
只是为了确定: 这是如何清除前一个结果的指针,以便能够再次使用mysql_fetch_assoc?
mysql_data_seek($result,mysql_num_rows($result) - 1);
我不确定该用什么作为第二个参数。不可否认,我对指针并不是很清楚,但似乎我应该将指针清除为0.但是我得到了这个错误:
Offset 0 is invalid for MySQL result index 8 (or the query data is unbuffered
答案 0 :(得分:1)
检查与mysql_error()的连接,看看是否收到“命令不同步”错误。如果是这样,您需要在完成第一个查询之后和开始第二个查询之前调用mysql_free_result()。您也可以调用mysql_close()来关闭数据库连接,然后重新打开一个新连接。
有关详细信息,请参阅this question。
答案 1 :(得分:0)
OP改变了问题,请参阅编辑
*在此删除已发布的代码**
修改强>
在您编辑完问题并明确表示您实际拥有2个资源后,看起来还有其他问题。当您使用两个不同的资源来提供mysql_fetch_assoc()
时,您不必担心指针。 mysql_fetch_assoc()
的内容是它通过引用获取您的参数($result
)。
现在回答你的问题:
我通常会尝试尽可能减少对MySQL的调用,但我终于遇到了必须在一个脚本中对MySQL进行多次调用的情况。
在一个脚本中多个SQL调用没有错。虽然通常你应该尝试最小化SQL调用(因为它们可能会损害性能)。
看起来你不能在一个脚本中使用mysql_fetch_assoc两次(!)。
严重错误。你可以做到这一点。只要你注意上面的内容。但是,当你有两个结果集时,这不是你的问题。
似乎mysql_data_seek是解决方案,但我似乎无法让它工作。
再次:当你使用两个(不同的)结果集时,这与它无关。
要清楚,我需要提出两个问题。第二个查询取决于第一个查询的结果。
这根本不应该是任何问题。它看起来是另一回事。您是否确认第二个查询确实是您认为的?你确定有记录吗?您确定没有任何(MySQL)错误。您是否启用了错误报告?您是否尝试过打印mysql_error()
?为了更好地帮助您,请提供您的真实代码,而不是etc etc
的东西?也许正在发生其他事情。
或者您可能只是尝试在第一个循环中运行第二个查询。这在很多方面都会很糟糕。