2024 年 PHP 日本会议

oci_fetch_object

(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)

oci_fetch_object将查询的下一行作为对象返回

描述

oci_fetch_object(资源 $statement, 整数 $mode = OCI_ASSOC | OCI_RETURN_NULLS): stdClass|false

返回一个包含查询的下一结果集行的对象。对象的每个属性对应于该行的列。此函数通常在循环中调用,直到返回false,表示不再存在更多行。

有关 OCI8 扩展执行的数据类型映射的详细信息,请参阅驱动程序支持的数据类型

参数

statement

oci_parse()创建并由oci_execute()执行的有效 OCI8 语句标识符,或REF CURSOR语句标识符。

返回值

返回一个对象。对象的每个属性对应于该行的列。如果statement中没有更多行,则返回false

任何LOB列都作为 LOB 描述符返回。

DATE列作为格式化为当前日期格式的字符串返回。可以使用 Oracle 环境变量(例如NLS_LANG)或先前执行的ALTER SESSION SET NLS_DATE_FORMAT命令更改默认格式。

Oracle 的默认不区分大小写的列名将具有大写属性名。区分大小写的列名将具有使用精确列大小写的属性名。使用var_dump()查看结果对象以验证属性访问的适当大小写。

对于任何NULL数据字段,属性值将为null

示例

示例 #1 oci_fetch_object()示例

<?php

/*
运行前,创建表:
CREATE TABLE mytab (id NUMBER, description VARCHAR2(30));
INSERT INTO mytab (id, description) values (1, 'Fish and Chips');
COMMIT;
*/

$conn = oci_connect('hr', 'welcome', 'localhost/XE');
if (!
$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

$stid = oci_parse($conn, 'SELECT id, description FROM mytab');
oci_execute($stid);

while ((
$row = oci_fetch_object($stid)) != false) {
// 对于每个标准 Oracle 列,使用大写属性名
echo $row->ID . "<br>\n";
echo
$row->DESCRIPTION . "<br>\n";
}

// 输出为:
// 1
// Fish and Chips

oci_free_statement($stid);
oci_close($conn);

?>

示例 #2 使用区分大小写列名的 oci_fetch_object()

<?php

/*
运行前,创建一个带有区分大小写列名的表:
CREATE TABLE mytab (id NUMBER, "MyDescription" VARCHAR2(30));
INSERT INTO mytab (id, "MyDescription") values (1, 'Iced Coffee');
COMMIT;
*/

$conn = oci_connect('hr', 'welcome', 'localhost/XE');
if (!
$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

$stid = oci_parse($conn, 'SELECT id, "MyDescription" FROM mytab');
oci_execute($stid);

while ((
$row = oci_fetch_object($stid)) != false) {
// 对于每个标准 Oracle 列,使用大写属性名
echo $row->ID . "<br>\n";
// 使用区分大小写列名的精确大小写
echo $row->MyDescription . "<br>\n";
}

// 输出为:
// 1
// Iced Coffee

oci_free_statement($stid);
oci_close($conn);

?>

示例 #3 带有 LOB 的 oci_fetch_object()

<?php

/*
运行前,请创建表:
CREATE TABLE mytab (id NUMBER, description CLOB);
INSERT INTO mytab (id, description) values (1, 'A very long string');
COMMIT;
*/

$conn = oci_connect('hr', 'welcome', 'localhost/XE');
if (!
$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

$stid = oci_parse($conn, 'SELECT id, description FROM mytab');
oci_execute($stid);

while ((
$row = oci_fetch_object($stid)) != false) {
echo
$row->ID . "<br>\n";
// 下面的代码将输出DESCRIPTION的前11个字节
echo $row->DESCRIPTION->read(11) . "<br>\n";
}

// 输出结果为:
// 1
// A very long

oci_free_statement($stid);
oci_close($conn);

?>

参见

添加笔记

用户贡献笔记 1 条笔记

juanloman at hilfetech dot com
12 年前
请注意,您仍然可以使用花括号语法来引用具有非常复杂名称的列,如下例所示

<?php

$queryStr
= 'SELECT COUNT(*) FROM FOOBAR'; // 复杂的名称!
// 解析并执行...
$queryObj = oci_fetch_object($quertStmt);

echo
'Count: ' . $queryObj->{'COUNT(*)'}; // 花括号语法引用

?>
To Top