我已经将这个问题分解为它的本质,但我仍然遇到问题。
当我尝试使用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按预期输出
有什么想法吗?
答案 0 :(得分:0)
这实际上是mysqli诚实的方式! 事情分批发生2,这意味着你需要在做其他事情之前清除最后的结果。如果你不这样做 - > ERROR!
您可以使用next_result()
来实现这一点,例如:
while($this->_mysqli->next_result());
..然后成功继续您的代码。上面的例子恰好在返回数组之前运行fetch_assoc_进程之后才适合。
(我知道这是在3个月前被问到的,但是比从来没有迟到过;)