2

我正在使用 PDO 数据库调用为 PHP 中的移动应用程序创建 Web 服务。问题代码如下:

// Prepare Stored Procedure Call
    $query = "CALL " . $_GET['proc'] . '('.implode(', ', array_keys($paramArray)).')';
    $stmt = $dbh->prepare($query);
    $stmt->execute($paramArray);
    $resultSets = array();

// Loop And Build Results into a JSON Array

    do {
        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
        if($rows){
            //echo json_encode($rows);
            $resultSets[] = $rows;
        }

    } while ($stmt->nextRowset());

    echo "Hello test.";
    echo json_encode($resultSets);

while ($stmt->nextRowset()) ; 在我的服务器上导致 500 错误,停止代码。

  • 使用上面的代码,我得到一个 500 错误,我没有得到“Hello test”。echo 打印,我没有得到 JSON 结果集,我的连接也没有关闭。

  • 如果我删除 do while 循环,没有 500 错误,我会设置结果的第一行(因为它没有循环),并在连接关闭时回显“Hello test”。

  • 如果我放置echo json_encode($resultSets); 在循环内部,我得到了 JSON 结果集,但是我得到了第一个完整的结果集,然后我得到了第一个和第二个完整的结果集(本质上是在循环到结果集中时返回每一行。这个是可预测的,但循环正在工作..)。

在我看过的所有其他 PDO 示例中,这是他们用来返回数据的循环。我在这里做错了吗?

4

0 回答 0