我有一个存储的例程,有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返回记录集,无论它是否有零行?
答案 0 :(得分:-1)
我也看到了这个问题。我原本以为它与声明 - > nextrowset()错误(#67130)有关,自PHP 5.6起修复,但我已经升级了,我仍然看到了这个问题。
在我的情况下,我正在做FETCH_OBJ,有趣的是,如果我在入站参数上使用bindParam而不是bindValue,我可以得到结果。但我没有把它钉在那之上。
除了你所看到的,似乎如果在存储过程中执行ddl语句(如优化表),则该点之后的所有行集都将从结果集中丢失。
您和我是宇宙中唯一一个将PDO用于返回多个结果集的存储过程的人吗?
在您的具体情况下,(我自己没有尝试过)您可以尝试FETCH_OBJ,然后行集不会为空,它将具有值为0的属性。