按数字循环数组oci_fetch_all


Looping array oci_fetch_all by number

我使用以下语句从Oracle获取结果:

$nrows_g = oci_fetch_all( $geos, $r1, 0, -1, OCI_ASSOC + OCI_FETCHSTATEMENT_BY_ROW);

虽然我能够通过foreach结构枚举结果,但我需要使用for循环或更好地使用列名来访问它们。我一定是漏掉了什么,但我不能让它工作。谁能给我指个方向吗?

谢谢,Steef

如果不使用oci_fetch_all(),通常会实现更好的性能,因为这会将整个结果集检索到内存中。迭代地获取和处理每一行可以大大降低内存使用量。

$conn = oci_connect($user, $pass, $server);
$stmt = oci_parse($conn, 'select field1, field2 from blah');
oci_execute($stmt);
while (false !== ($row = oci_fetch_assoc($stmt)) {
    echo 'Field 1: ' . $row['FIELD1'] . '<br>Field 2: ' . $row['FIELD2'] . '<br>';
}

如果你真的想使用foroci_fetch_all()循环,你可以这样做:

$conn = oci_connect($user, $pass, $server);
$stmt = oci_parse($conn, 'select field1, field2 from blah');
oci_execute($stmt);
$count = oci_fetch_all($stmt, $result, 0, -1, OCI_FETCHSTATEMENT_BY_ROW);
for ($i = 0; $i < $count; $i++) {
    echo 'Field 1: ' . $result[$i]['FIELD1'] . '<br>Field 2: ' . $result[$i]['FIELD2'] . '<br>';
}