3

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

当我尝试使用 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 按预期输出

有任何想法吗?

4

1 回答 1

0

老实说,这实际上是 mysqli 的工作方式!事情以 2 个批次发生,这意味着您需要在执行任何其他操作之前清除最后一个结果。如果你不这样做 -> 错误!

您可以通过使用来实现next_result(),示例如下:

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

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

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

于 2012-07-17T12:49:49.807 回答