PDO PHP 从存储例程中缺少记录集


PDO PHP Missing Record Sets from Stored Routine

我有一个存储的例程,它是 3 个选择。

SELECT * FROM Table1 WHERE Wibble > 0;
SELECT * FROM Table2 WHERE Dibble > 1;
SELECT * FROM Table3 WHERE Fibble > 2;

当我在MySQL WorkBench中运行它时,我返回了3个记录集。

这不是下面的代码,但这个网站迫使我把它作为代码输入:

Table1 = 3 rows.
Table2 = 0 rows.
Table3 = 5 rows.

当我在 PHP 中循环访问记录集时,我只得到 2 个!

$returnedRows1 = $results->fetchAll ( PDO::FETCH_ASSOC );
$results->nextRowset( );
$returnedRows2 = $results->fetchAll ( PDO::FETCH_ASSOC );
$results->nextRowset( );
$returnedRows3 = $results->fetchAll ( PDO::FETCH_ASSOC );

这基本上为您提供:

PDOStatement::fetchAll(): SQLSTATE[HY000]: General error in 

由于表 2 中的记录集在翻译中丢失了。

因此$returnedRows 1 具有表 1 的结果。

因此,$returnedRows 2 的结果来自表 3。

最后是 $returnedRows 3 个错误。

那么......任何想法如何让PDO返回记录集,无论它是否有零行?

我也看到了这个问题。 我最初认为它与语句->nextrowset() 错误 (#67130) 有关,该错误已从 PHP 5.6 开始修复,但是我已经升级了,但我仍然看到这个问题。

就我而言,我正在做FETCH_OBJ,有趣的是,如果我在入站参数上使用 bindParam 而不是 bindValue,我可以得到结果。 但我还没有确定它。

除了您所看到的之外,如果在存储过程(如优化表)中执行 ddl 语句,则该点之后的所有行集都将从结果集中丢失。

你和我是否是宇宙中唯一将 PDO 与返回多个结果集的存储过程一起使用的人?

在您的特定情况下,(我自己没有尝试过)您可能会尝试FETCH_OBJ,那么行集不会为空,它将具有值为 0 的属性。