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 テスト" を取得できません。echo to print を実行しましたが、JSON 結果セットが得られず、接続が閉じません。

  • do while ループを削除すると、500 エラーは発生せず、(ループしていないため) 結果の最初の行が設定され、接続を閉じると "Hello test" がエコーされます。

  • echo json_encode($resultSets);を配置すると ループ内で JSON 結果セットを取得しますが、最初の結果セット全体を取得し、次に最初と 2 番目の結果セット全体を取得します (基本的に、結果セットにループするときに各行を返します。この予測可能でしたが、ループは機能しています..)。

私が見た他のすべての PDO の例では、これがデータを返すために使用するループです。ここで何か間違ったことをしていますか?

4

0 に答える 0