我已经将这个问题分解为它的本质,但仍然有问题。
当我尝试使用 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();
回声的"命令不同步;您现在无法运行此命令"和投掷致命错误:在非对象上调用成员函数 close()
按预期$rows输出
有什么想法吗?
老实说,这实际上是mysqli的工作方式!事情以 2 为批次发生,这意味着您需要在执行其他任何操作之前清除最后一个结果。如果你不 ->错误!
您可以使用 next_result()
来实现这一点,示例如下:
while($this->_mysqli->next_result());
..然后继续成功执行您的代码。上面的示例适合在返回数组之前运行fetch_assoc_进程之后。
(我知道这是 3 个月前问过的,但迟到总比从不;)