Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PDO PHP从存储例程中丢失记录集_Php_Mysql_Pdo - Fatal编程技术网

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

PDO PHP从存储例程中丢失记录集,php,mysql,pdo,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 row

我有一个存储的例程,它是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的结果来自表1

因此$returnedRows2的结果来自表3

最后是$returnedRows3错误


所以。。。你知道如何让PDO返回记录集,而不管它是否有零行吗?

我也看到了这个问题。我最初认为它与语句->nextrowset()bug(#67130)有关,该错误在PHP5.6中已经修复,但是我已经升级了,我仍然看到了这个问题

在我的例子中,我正在执行FETCH_OBJ,有趣的是,如果在入站参数上使用bindParam而不是bindValue,我可以返回结果。但我还没有把它搞定

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

您和我是世界上唯一将PDO用于返回多个结果集的存储过程的人吗


在您的特定情况下,(我自己没有尝试过)您可以尝试获取对象,这样行集就不会为空,它将有一个值为0的属性。

您使用什么代码来循环记录集?如果你想让任何人看到这个问题并试图重现它,你需要包含一些MySQL和PHP方面的代码。循环等本身不是问题。问题是,那是11个月前的事了,今晚我把它搞了一两个小时,我无法复制它。所以现在,你可能需要问下面的人代码的例子,因为他现在有这个问题。哈,甚至没有注意到它太旧了。因为有了新的答案,我才排上了队。