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

时间:2014-05-12 10:14:42

标签: php mysql sql mysqli

 `$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'])); 
}

当我删除' // *'语句我失去了同步错误....保持这两行帮助我运行我的代码但代码变慢,因为每次循环迭代数据库连接关闭并重新打开。请给我一个替代......我真的很感激你

3 个答案:

答案 0 :(得分:0)

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

  1. 在将其用于其他查询之前从缓冲区中获取所有数据
  2. 了解如何设置此mysqli连接以获取未缓冲的数据。
  3. 在这里阅读更多内容 http://dev.mysql.com/doc/apis-php/en/apis-php-mysqlinfo.concepts.buffering.html

答案 1 :(得分:0)

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循环...现在它不是必需的

答案 2 :(得分:-1)

在你真正完成数据库连接之前,如何才能关闭数据库连接?

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