存储过程与fetch_all一起使用时会导致mysqli出现问题

时间:2012-04-14 04:18:18

标签: php stored-procedures mysqli

我已经将这个问题分解为它的本质,但我仍然遇到问题。

当我尝试使用fetch_all来获取存储过程的结果时,我得到的结果按预期返回到数组,但后续的mysqli调用会抛出“命令不同步”错误。

我甚至尝试将我的存储过程简化为......

CREATE PROCEDURE testp()
BEGIN
   SELECT * FROM tbl
END

我把桌子做得很小,10排3柱。

我使用以下PHP

$query = "CALL testp()";
$result = $db->query($query);
$rows = $result->fetch_all(MYSQL_ASSOC);
$result->free();
print_r($rows);
$query = "SELECT * FROM tbl WHERE id = ?";
$stmt = $this->db->prepare($query);
echo $this->db->error;
$stmt->close();

Echo的“命令不同步;你现在无法运行此命令” 并投掷 致命错误:在非对象上调用成员函数close()

$ rows按预期输出

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这实际上是mysqli诚实的方式! 事情分批发生2,这意味着你需要在做其他事情之前清除最后的结果。如果你不这样做 - > ERROR!

您可以使用next_result()来实现这一点,例如:

while($this->_mysqli->next_result());

..然后成功继续您的代码。上面的例子恰好在返回数组之前运行fetch_assoc_进程之后才适合。

(我知道这是在3个月前被问到的,但是比从来没有迟到过;)