Php 和 oracle OCI 查询

Php and oracle OCI query

我对这段代码有疑问

$stmt = oci_parse($db, $sql);
$isQueryOk = oci_execute($stmt);
if ($isQueryOk) {
    while (($row = oci_fetch_assoc($stmt)) != false) {
        array_push($results, $row);
    }
    echo json_encode($results);
} else {
    $msg = "Error FETCHING ALL [$sql] on " . mb_strtoupper($dbTable) . "!";
}

问题是,如果 oci_fetch_assoc($stmt) return 20000 行,while (($row = oci_fetch_assoc($stmt)) != false) { array_push($results, $row); } 需要很多时间。有没有一种方法可以让我 return echo json_encode($results); 没有 WHILE 循环。

提前致谢。

我不确定它是否会明显更快,但作为 ,您可以尝试使用 oci_fetch_all。您需要按行(而不是按列,默认)将标志传递给 return 以匹配您当前的输出格式:

oci_fetch_all($stmt, $output, 0, -1, OCI_FETCHSTATEMENT_BY_ROW);
json_encode($output);

有关详细信息,请参阅 the documentation

或尝试使用其他方式推送您的阵列。 "Note: If you use array_push() to add one element to the array it's better to use $array[] = because in that way there is no overhead of calling a function."http://php.net/manual/en/function.array-push.php

$results[] = $row;