【问题标题】:MYSQL + PDO nextRowSet Loops one too many times?MYSQL + PDO nextRowSet 循环一个太多次?
【发布时间】:2014-03-26 16:06:11
【问题描述】:

我正在为返回多个结果集的 MYSQL (5.5.35) 存储过程而苦苦挣扎,我想知道是否有人可以解释出了什么问题。 SQL如下

SELECT 't1' as tableName, tbl1.* FROM table1 tbl1;
SELECT 't2' as tableName, tbl2.* FROM table2 tbl2;
SELECT 't3' as tableName, tbl3.* FROM table3 tbl3;
SELECT 't4' as tableName, tbl4.* FROM table4 tbl4;
SELECT 't5' as tableName, tbl5.* FROM table5 tbl5;
SELECT 't6' as tableName, tbl6.* FROM table6 tbl6;

然后我有一些 PHP 可以做到这一点......

 $sth =$dbh->prepare('CALL getAllRecords()');
 $sth->execute();

 $i = 1;
 do {
    echo "<h3>$i Set</h3>";
    $i++;
    $rows = $sth->fetchAll();
 } while ($sth->nextRowset());

人们会期望在浏览器中看到以下内容

1 Set
..
6 Set

但它会运行 7 个结果集,这又会导致异常

Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error'

我在这里错过了一些非常简单的东西吗?

【问题讨论】:

  • 哪一行抛出异常? fetchAll?
  • 是的,它是 fetchAll
  • 我不认为自己是任何意义上的专家,但老实说,我看不出代码有任何明显错误。
  • @JoachimIsaksson 我也是,我一生都看不到为什么我要第七次点击 do/while 循环:( - 我能看到的唯一可能导致问题的是6 个数据集中的最后 2 个是空的,但即便如此,我只是测试 $rows,我仍然不应该进入该循环 7 次。

标签: php mysql pdo multiple-resultsets


【解决方案1】:

看起来类似于https://stackoverflow.com/a/26381914/2208000。解决方案是检查列数,如果为 0,则中断循环。这对我有用,但你的里程可能会有所不同。

【讨论】:

    猜你喜欢
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 2015-10-29
    • 2016-07-25
    相关资源
    最近更新 更多