命令不同步..你现在不能在while循环中运行这个命令

Posted

技术标签:

【中文标题】命令不同步..你现在不能在while循环中运行这个命令【英文标题】:commands are out of sync.. you cant run this command now in while loop 【发布时间】:2014-05-12 10:14:42 【问题描述】:
 `$sql = "call geodist(".$_SESSION['This'].",500)";` //get the ids near you

$result=mysqli_query($GLOBALS['link'],$sql) or die(mysqli_error($GLOBALS['link']));

while($row=mysqli_fetch_assoc($result)) // insert them into nerby table


$sql = "INSERT INTO `nearby`(`userid`, `strangerid`) VALUES (".$_SESSION['This'].",".$row['id'].")";
mysqli_close($GLOBALS['link']);                                                      
mysqli_query($GLOBALS['link'],$sql) 
    or die("akash".mysqli_error($GLOBALS['link'])); 

当我删除“//*”语句时,我会出现不同步错误......保留这两行有助于我运行代码,但代码会变慢,因为每次循环迭代都会关闭并重新打开数据库连接。请给我一个备用电话....我真的很感激你

【问题讨论】:

您可以将过程的结果存储在临时表中,并将此临时表用于单个INSERT 语句。如果这样做,则根本不需要循环。 ***.com/questions/17944871/… 接受的答案显示了它是如何完成的。 谢谢....我认为它可以工作 @VMai 谢谢哥们.. 它奏效了... :-) 您可以回答自己的问题,并展示您是如何用不同的方法解决这个问题的。 @VMai 显示我现在无法回答我的问题 【参考方案1】:

当您尝试用新数据(循环内的查询)填充 mysql 和 php 之间的缓冲区时,会发生什么情况。 你需要做的是

    在将缓冲区用于其他查询之前从缓冲区获取所有数据 看看你如何设置这个 mysqli 连接来获取无缓冲的数据。

在这里阅读更多 http://dev.mysql.com/doc/apis-php/en/apis-php-mysqlinfo.concepts.buffering.html

【讨论】:

【参考方案2】:
DROP TEMPORARY TABLE IF EXISTS near;
CREATE TEMPORARY TABLE near

我在 geodist() 过程中添加了这两行。 它创建一个名为“near”的临时表并将结果集存储在其中。 现在这个表可以按如下方式使用

$sql = "call geodist(".$_SESSION['This'].",".$GLOBALS['RADIUS'].")";            // get the ids near you
         $result=mysqli_query($GLOBALS['link'],$sql) or die(mysqli_error($GLOBALS['link']));


 $sql = "SELECT m.`id`\n"    
        . " FROM `members` m , `already_assigned` a\n"    
        . " WHERE a.`id`=m.`id` and m.`id` <> ".$_SESSION['This']."\n"    
        . " and m.`gender`=".$_SESSION['wants']." and m.`interested_in`=".$_SESSION['gender']." and a.`status`='free'\n"   
        . " and m.`id` IN (SELECT * from `near`)\n"  /*see this line*/    
        . " ORDER BY RAND( ) \n"   
        . " LIMIT 1";

你可以看到现在我已经删除了 while 循环......现在它不需要了

【讨论】:

【参考方案3】:

在你真正完成之前不关闭数据库连接怎么样?

您应该只与任何给定的数据库服务器建立一个连接(基本上,脚本中只有一个连接,除非您正在使用复杂的多数据库服务器设置)

【讨论】:

如果我不关闭连接,那么我会收到“OUT OF SYNC ERROR......现在无法运行此命令”错误 @user3627904 通常不需要关闭连接,因为非持久打开的链接会在脚本执行结束时自动关闭 我认为你没有明白我的意思....保留这两行有助于我的代码运行..如果删除,显示错误

以上是关于命令不同步..你现在不能在while循环中运行这个命令的主要内容,如果未能解决你的问题,请参考以下文章

PHP mysqli 命令不同步;你现在不能运行这个命令

python 命令不同步;你现在不能运行这个命令”

错误:命令不同步;你现在不能运行这个命令

PHP - 获取:命令不同步;你现在不能运行这个命令

Python“命令不同步;你现在不能运行这个命令“

命令不同步;在 Mysql 中调用存储过程时,您现在无法运行此命令