【问题标题】:Stored Procedure causing problems with mysqli when used with fetch_all与 fetch_all 一起使用时导致 mysqli 出现问题的存储过程
【发布时间】:2012-04-26 09:57:38
【问题描述】:

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

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

有什么想法吗?

【问题讨论】:

    标签: php stored-procedures mysqli


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多