与fetch_all使用时存储过程导致与mysqli的问题(Stored Procedure cau

2019-09-16 13:04发布

我已经破裂这一问题给它的本质,但我仍然有问题。

当我尝试使用fetch_all得到一个存储过程的结果,我得到预期的结果返回到数组,但后续的mysqli调用throw“命令不同步”的错误。

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

CREATE PROCEDURE testp()
BEGIN
   SELECT * FROM tbl
END

我做了小桌子,10排3周的cols。

我用下面的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()一个非对象

$行输出如预期

有任何想法吗?

Answer 1:

这实际上是mysqli的是如何工作的,说实话! 事情发生在2批,这意味着你需要清楚在做任何事情之前最后的结果。 如果你不这样做 - >错误!

您可以通过使用实现这一next_result()例如如下:

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

..then与您的代码顺利进行。 上面的例子将适合的fetch_assoc_过程返回数组之前运行之后。

(我知道这是问3个月前,而是晚不迟;)



文章来源: Stored Procedure causing problems with mysqli when used with fetch_all