我已经将这个问题分解到其本质,但仍然遇到问题。
当我尝试使用 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 输出符合预期
有任何想法吗?
老实说,这实际上就是 mysqli 的工作原理!
事情以 2 批为一组发生,这意味着您需要在执行其他操作之前清除最后的结果。如果你不这样做 -> 错误!
您可以通过使用来实现next_result()
,示例如下:
while($this->_mysqli->next_result());
..然后成功地继续您的代码。上面的示例适合在 fetch_assoc_ 进程运行之后返回数组之前。
(我知道这个问题是 3 个月前提出的,但晚总比不问好;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)