PDO PHP从存储的例程中丢失记录集

时间:2014-12-08 19:07:13

标签: php mysql pdo

我有一个存储的例程,有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中的记录集在翻译中丢失了。

因此$ returnedRows1的结果来自Table1。

因此$ returnedRows2的结果来自Table3。

最后$ returnsRows3错误。

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

1 个答案:

答案 0 :(得分:-1)

我也看到了这个问题。我原本以为它与声明 - > nextrowset()错误(#67130)有关,自PHP 5.6起修复,但我已经升级了,我仍然看到了这个问题。

在我的情况下,我正在做FETCH_OBJ,有趣的是,如果我在入站参数上使用bindParam而不是bindValue,我可以得到结果。但我没有把它钉在那之上。

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

您和我是宇宙中唯一一个将PDO用于返回多个结果集的存储过程的人吗?

在您的具体情况下,(我自己没有尝试过)您可以尝试FETCH_OBJ,然后行集不会为空,它将具有值为0的属性。