一个PHP页面上的多个MySQL查询

时间:2011-07-30 15:44:37

标签: php mysql

我有以下PHP / MySQL代码:

function executeMultirowQuery($query) {
   $result = mysql_query($query);
   $table = array(); 

   if ($result == false) {
      $error = mysql_error();
      echo $error;
   } else {
      while ($row = mysql_fetch_assoc($result)) {
         $table[] = $row;
      }
      mysql_free_result($result);
   }

   return $table;
}

它基本上执行给定的查询,并将结果作为多维数组返回。 对此函数的第二次调用(以及所有后续调用)会导致“命令不同步;您现在无法运行此命令”错误。

由于我在返回之前调用了mysql_free_result(),我不认为我仍然有一个请求,但我想不出任何其他原因可能会失败。

有什么想法吗?

编辑: 如果它有任何区别,我正在使用此函数来调用这样的存储过程:

function getGroups($groupTypeID) {
   echo "getGroups";
   $query = sprintf("CALL getGroups('%s');", mysql_real_escape_string($groupTypeID));

   return $this->executeMultirowQuery($query);
}

这是使用executeMultirowQuery()函数的典型方式。

编辑: 这是我的连接代码:

$this->link = mysql_connect($host, $user, $password);
$success = mysql_select_db($database);

if (!$this->link) {
   die('Could not connect: ' . mysql_error());
}

此外,这是来自存储过程的示例查询:

CREATE DEFINER=`blah`@`blah` PROCEDURE `getGroups`(
    IN inGroupTypeID INT )
BEGIN
   SELECT * FROM `db`.`Groups`
   WHERE GroupTypeID = inGroupTypeID;
END

同样,这是该功能如何使用的典型。没有任何存储过程返回多个结果集(我理解在PHP / MySQL中不起作用)。

2 个答案:

答案 0 :(得分:1)

存储过程返回两个结果集 - 您的数据加上获取的行数计数,因此您需要调用

next_result() 
每次db调用后

你最好使用mysqli vs mysql(只有最新的mysql扩展支持sproc调用)然后你可以使用更快的fetch_all方法来填充你的数组。

$table = $result->fetch_all(MYSQLI_ASSOC);

希望这有帮助

答案 1 :(得分:0)

我认为你应该在$result == false时做一个mysql_free_result()。因此,请将mysql_free_result($result)移到else {}之外,并在返回之前移动。

以下链接可能有所帮助:

http://dev.mysql.com/doc/refman/5.0/en/commands-out-of-sync.html

http://mike-hostetler.com/blog/2007/04/php-5-and-mysql-5-stored-procedures-error-and-solution-qcodo