我使用以下语句从Oracle获取结果:
$nrows_g = oci_fetch_all( $geos, $r1, 0, -1, OCI_ASSOC + OCI_FETCHSTATEMENT_BY_ROW);
虽然我能够通过foreach结构枚举结果,但我需要使用for循环访问它们,甚至更好地通过列名访问它们。我必须遗漏一些东西,但我无法让它发挥作用。任何人都可以指出我正确的方向吗?
谢谢,Steef答案 0 :(得分:1)
如果不使用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>';
}
如果你真的想使用for
循环和oci_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>';
}