命令不同步..你现在不能在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循环中运行这个命令的主要内容,如果未能解决你的问题,请参考以下文章