oci_result

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

oci_result返回从获取的行中获取的字段的值

描述

oci_result(resource $statement, string|int $column): mixed

返回当前行中 column 的数据,该行由 oci_fetch() 获取。

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

参数

statement

column

可以使用列号(从 1 开始)或列名。列名的大小写必须与 Oracle 元数据描述列的大小写相同,对于不区分大小写的列来说,大小写为大写。

返回值

除了抽象类型(ROWID、LOB 和 FILE)之外,所有内容都以字符串形式返回。如果发生错误,则返回 false

示例

示例 #1 oci_fetch()oci_result()

<?php

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

$sql = 'SELECT location_id, city FROM locations WHERE location_id < 1200';
$stid = oci_parse($conn, $sql);
oci_execute($stid);

while (
oci_fetch($stid)) {
echo
oci_result($stid, 'LOCATION_ID') . " is ";
echo
oci_result($stid, 'CITY') . "<br>\n";
}

// 显示:
// 1000 is Roma
// 1100 is Venice

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

?>

参见

添加注释

用户贡献的注释 9 个注释

1
erabbott at NOSPAMterra dot com dot br
21 年前
请注意,如果您要进行多个表选择,则必须为每个列指定别名。

这将不起作用
----------------------------------------
$qry = "SELECT A.COL_ONE, B.COL_ONE FROM TABLE1 A, TABLE2 B";
$stmt = OCIParse($conn, $qry);

while(OCIFetch($stmt))
{
$a = OCIResult($stmt, "A.COL_ONE");
...
----------------------------------------

但这样可以
----------------------------------------
$qry = "SELECT A.COL_ONE AS X, B.COL_ONE AS Y FROM TABLE1 A, TABLE2 B";
$stmt = OCIParse($conn, $qry);

while(OCIFetch($stmt))
{
$a = OCIResult($stmt, "X");
...
----------------------------------------

此致,
1
dominic dot standage at revolutionltd dot com
24 年前
OCIResult() 要求列名用大写字母书写,因此 OCIResult($stmt,"column") 不起作用,但 OCIResult($stmt,"COLUMN") 可以正常工作。希望这对某些人有所帮助。
-1
luismanuelp at gmail dot com
18 年前
我正在尝试获取字符字符串的首字母列表。

SELECT distinct substr(version,1,1) as COL1 FROM SPHVVERS where Version is not null order by 1

这曾经有效,但最近失败了。我认为这是因为现在添加的一些字符串的第一个字符是数字。

我发现要使其正常工作,我必须使用 decode 语句。(To_Char 不起作用)

SELECT distinct decode (substr(version,1,1),'1','?','0','!',substr(version,1,1)) as COL1 FROM SPHVVERS where Version is not null order by 1
-2
jthome at fcgov dot com
21 年前
仅供参考 -

为了修改 Oracle 日期(使用 NLS_DATE_FORMAT...),您必须首先设置 $ORACLE_HOME。此环境变量最好在服务器启动脚本(即 ./apachectl)中设置。

--
Jim
-2
shayman at quiver dot com
23 年前
由于此函数为列索引获取“混合”变量类型,因此您可以使用整数来表示列号。在这种情况下,计数从 1 开始,而不是从零开始。
我不确定,但我认为这种方法比使用列名要快一些。
有关示例,请参阅 OCINumCols 的第一个示例。
-3
gabi at gambita dot de
20 年前
如果您要连接两个具有相同列(例如“id”)的表,但您不想(或不能)指定这两个表中的所有其他字段(如 erabbott 所述),您可以使用

SELECT t1.*, t2.*, t1.id AS id1, t2.id AS id2
FROM table1 t1, table2 t2;

请注意,这_不起作用_

SELECT *,t1.id AS id1, t2.id AS id2
FROM table1 t1, table2 t2;
-3
steve dot hurst at instem-lss dot co dot uk
22 年前
我正在尝试获取字符字符串的首字母列表。

SELECT distinct substr(version,1,1) as COL1 FROM SPHVVERS where Version is not null order by 1

这曾经有效,但最近失败了。我认为这是因为现在添加的一些字符串的第一个字符是数字。

我发现要使其正常工作,我必须使用 decode 语句。(To_Char 不起作用)

SELECT distinct decode (substr(version,1,1),'1','?','0','!',substr(version,1,1)) as COL1 FROM SPHVVERS where Version is not null order by 1
-4
dwilson at cae dot wisc dot edu
23 年前
我抱怨说我无法从 Oracle 日期字段中获取时间。Joe Brown 说

这不是 PHP 错误。

考虑设置 NLS_DATE_FORMAT。

手册指出 OCIResult() 将所有内容都作为字符串返回。
NLS_DATE_FORMAT 可能不适合您的需求。

您可以在很多地方设置 NLS_DATE_FORMAT。
* 环境变量(或 win32 上的 Windows 注册表)
* orclSID.ora
* 在每个会话基础上;登录后执行此语句

$cursor=OCIParse($connection,
"ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'");
OCIExecute($cursor);
OCIFreeCursor($cursor);
-5
erabbott at NOSPAMterra dot com dot br
21 年前
正如我在上一篇帖子中提到的,在 CLOB 列中使用转换函数时,同样的事情也会发生。

您使用的任何转换函数都可能会遇到相同的问题。

因此,以下代码将无法正常工作。

SELECT ... TO_CHAR(MY_CLOB) ...

$my_clob = OCIResult($stmt,"MY_CLOB");

但这样可以

SELECT ... TO_CHAR(MY_CLOB) AS MYC ...

$my_clob = OCIResult($stmt,"MYC");

此致。
To Top