我正在使用 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 示例中,这是他们用来返回数据的循环。我在这里做错了吗?