在单个PHP脚本中使用mysql_fetch_assoc两次

时间:2012-03-28 18:15:37

标签: php mysql

我通常会尝试尽可能减少对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

2 个答案:

答案 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的东西?也许正在发生其他事情。

或者您可能只是尝试在第一个循环中运行第二个查询。这在很多方面都会很糟糕。