2016-10-18 9 views
3

私はこの問題はoci_fetch_assoc($stmt)リターン20000行ならば、while (($row = oci_fetch_assoc($stmt)) != false) { array_push($results, $row); } は多くの時間を要するということである。このコードPHPとOracleのOCIクエリ

$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) . "!"; 
} 

とprolemを持っています。 WHILEサイクルを使わずにecho json_encode($results);を返す方法はありますか?

ありがとうございます。

+0

使用oci_fetch_all:http://php.net/manual/en/function.oci-fetch-all.php –

+0

私が試してみたが、キー=>値のペアとしてフォーマットすることはできません。 "EMPRESA:" "CLCA"、 "CPP"、VAL:["CLCA"、 "CMIP"、 "CPP"]} CMPA "}、{EMPRESA:" CMIP "、VAL:" CMIP "}、{EMPRESA:" CPP "、VAL:" CPP "}] –

答えて

2

または、別の方法で配列をプッシュしようとします。注意:配列に1つの要素を追加するためにarray_push()を使用する場合は、$ array [] =を使うほうが良いのです。というのも、そのようにして関数を呼び出すオーバーヘッドがないからです。 http://php.net/manual/en/function.array-push.php

$results[] = $row; 
1

かなり速くなるとは確信していませんが、Marcos Sedrez wroteとしてoci_fetch_allを試してみてください。あなたはそれをあなたの現在の出力フォーマットに一致する行で返すためのフラグ(カラムの代わりに、デフォルト)に合格する必要があります:

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

は詳細についてはthe documentationを参照してください。

関連する問題