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 の例では、これがデータを返すために使用するループです。ここで何か間違ったことをしていますか?