【问题标题】:Using mysql_fetch_assoc twice in a single PHP script在单个 PHP 脚本中使用 mysql_fetch_assoc 两次
【发布时间】:2012-04-12 09:22:54
【问题描述】:

我通常会尽可能减少对 MySQL 的调用,但我终于遇到了必须在单个脚本中对 MySQL 进行多次调用的情况。

看起来您不能在一个脚本中使用两次mysql_fetch_assoc(!)。

似乎 mysql_data_seek 是解决方案,但我似乎无法让它工作。

为了清楚起见,我需要提出两个问题。第二个查询取决于第一个查询的结果...结构如下:

$result = mysql_query($query1); 而($row = mysql_fetch_assoc($result)){ $pos = $row['位置']; } mysql_free_result($result); // 根据下面的评论释放结果。 $query2 = ' '; //... 取决于 $pos - 在 mysql shell 中返回结果! $result2 = mysql_query($query2) 而($row = mysql_fetch_assoc($result2)){ 回声 $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

【问题讨论】:

标签: php mysql


【解决方案1】:

检查您与 mysql_error() 的连接,看看您是否收到“命令不同步”错误。如果是这样,您需要在完成第一个查询之后和开始第二个查询之前调用 mysql_free_result()。您也可以只调用 mysql_close() 来关闭您的数据库连接,然后重新打开一个新连接。

更多详情,请参阅this question

【讨论】:

    【解决方案2】:

    OP 更改了问题,请查看编辑

    *已删除此处发布的代码**

    编辑

    在您编辑了您的问题并明确表示您实际上有 2 个资源之后,看起来还有其他问题。当您使用两种不同的资源来提供mysql_fetch_assoc() 时,您不必担心指针。 mysql_fetch_assoc() 的问题在于它通过引用获取您的参数 ($result)。

    现在回答你的问题:

    我通常会尽可能减少对 MySQL 的调用,但我终于遇到了必须在单个脚本中对 MySQL 进行多次调用的情况。

    在一个脚本中调用多个 SQL 并没有错。虽然通常您应该尽量减少 SQL 调用(因为它们可能会损害性能)。

    看起来你不能在一个脚本中使用 mysql_fetch_assoc 两次(!)。

    完全错误。你可以做到。只要你注意以上。但是,当您有两个结果集时,这不是您的问题。

    似乎 mysql_data_seek 是解决方案,但我似乎无法让它工作。

    再次重申:当您使用两个(不同的)结果集时,这与它无关。

    为了清楚起见,我需要提出两个问题。第二个查询取决于第一个查询的结果。

    这根本不应该是任何问题。好像还有什么问题。您是否验证过第二个查询确实是您认为的那样?你确定有记录吗?你确定没有任何(MySQL)错误。您是否启用了错误报告?你试过打印出mysql_error()吗?为了更好地帮助您,您能否提供您的真实代码而不是etc etc 的东西?也许还有其他事情发生。

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

    【讨论】:

    • 如果您有第二个查询需要 mysql_fetch_assoc 在同一个脚本中处理?
    • 很抱歉接管您的答案,但@ina 更改了问题,所以它不正确(不再)。希望你不要介意。 :-)
    • 第二个查询确实返回了记录!第二个查询在它自己的循环中运行。抱歉,我已经盯着这个东西看了好几个小时了,这让我发疯了!
    • 对不起 - 我的意思是,如果我要进入 mysql,第二个查询返回记录......但不知何故 php 没有通过......
    • @ina 我感受到了你的痛苦。所以您尝试回显第二个查询并将其复制/粘贴到 shell 中并得到结果?如果是:mysql_error() 说什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 2013-12-09
    • 1970-01-01
    相关资源
    最近更新 更多