SunshinePHP Developer Conference 2015

oci_result

(PHP 5, PECL OCI8 >= 1.1.0)

oci_resultDevuelve el valor de un campo de la fila obtenida

Descripción

mixed oci_result ( resource $statement , mixed $field )

Devuelve los datos del campo dado por field de la fila actual, obtenida mediante oci_fetch().

Para más detalles sobre cómo la extensión OCI8 realiza la correspondencia entre tipos de datos, véasen los tipos de datos admitidos por el controlador

Parámetros

statement

field

Puede ser el número de columna (basado en 1) o el nombre de columna. El uso de mayúsculas/minúsculas del nombre de columna debe ser el mismo que el de los metadatos de Oracle que describen la columna, que es en mayúsculas para columnas creadas con uso insensible a mayúsculas/minúsculas.

Valores devueltos

Devuelve todo como un string excepto para tipos abstractos (ROWID, LOB y FILE). Devuelve FALSE en caso de error.

Ejemplos

Ejemplo #1 oci_fetch() con 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') . " es ";
    echo 
oci_result($stid'CITY') . "<br>\n";
}

// Muestra:
//   1000 es Roma
//   1100 es Venice

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

?>

Notas

Nota:

En versiones de PHP anteriores a la 5.0.0 se debe usar ociresult() en su lugar. Este nombre aún puede usarse; se dejó como alias de oci_result() por razones de retrocompatibilidad. Sin embargo, este nombre es obsoleto y no se recomienda.

Ver también

  • oci_fetch_array() - Devuelve la siguiente fila de una consulta como un array asociativo o numérico
  • oci_fetch_assoc() - Devuelve la siguiente fila de una consulta como un array asociativo
  • oci_fetch_object() - Devuelve la siguiente fila de una consulta como un objeto
  • oci_fetch_row() - Devuelve la siguiente fila de una consulta como un array numérico
  • oci_fetch_all() - Obtiene múltiples filas de una consulta y las ubica en un array bidimiensional

add a note add a note

User Contributed Notes 9 notes

up
2
dominic dot standage at revolutionltd dot com
15 years ago
OCIResult() requires the column name to be written in capitals, so OCIResult($stmt,"column") won't work, but OCIResult($stmt,"COLUMN") works fine. Hope that helps somebody out
up
1
gabi at gambita dot de
11 years ago
if you want to join two tables having both the same column (e.g. 'id') but you don't want to (or cannot) specify all the other fields in these two tables (like erabbott mentioned), you can use:

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

Note that this does _not_ work:

SELECT *,t1.id AS id1, t2.id AS id2
FROM table1 t1, table2 t2;
up
0
luismanuelp at gmail dot com
9 years ago
I am trying to get a list of the first character of a character string.

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

This was working and then failed recently. I think it is because some of the strings now added contain a number as the first character.

I found to get it to work I had to use decode statement. (To_Char did not work )

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
up
0
jthome at fcgov dot com
11 years ago
FYI--

In order to modify Oracle dates (using NLS_DATE_FORMAT...), you must set $ORACLE_HOME first.  This environmental variable is best set in the server startup script (i.e., ./apachectl)

--
Jim
up
0
erabbott at NOSPAMterra dot com dot br
12 years ago
As in my previous post, the same thing applies when using conversion functions in CLOB columns.

Probably the same thing will occur to any conversion function that you use.

So, this wont work

SELECT ... TO_CHAR(MY_CLOB) ...

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

But this will:

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

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

Best regards.
up
0
erabbott at NOSPAMterra dot com dot br
12 years ago
Note that if you are making multiple table selects, you must specify an alias to each column.

This wont work:
----------------------------------------
$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");
...
----------------------------------------

But this will:
----------------------------------------
$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");
...
----------------------------------------

Regards,
up
0
steve dot hurst at instem-lss dot co dot uk
12 years ago
I am trying to get a list of the first character of a character string.

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

This was working and then failed recently. I think it is because some of the strings now added contain a number as the first character.

I found to get it to work I had to use decode statement. (To_Char did not work )

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
up
0
dwilson at cae dot wisc dot edu
13 years ago
I complained that I couldn't get the time from an Oracle date field.  Joe Brown said:

This is not a PHP bug.

Consider setting NLS_DATE_FORMAT.

The manual states OCIResult() returns everything as a string.
NLS_DATE_FORMAT may not be appropriate for your needs.

There are quite a few places you can set NLS_DATE_FORMAT.
* Environment variables (or windows registry on win32)
* orclSID.ora
* on a per session basis; execute this statement after logon:

$cursor=OCIParse($connection,
"ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'");
OCIExecute($cursor);
OCIFreeCursor($cursor);
up
-1
shayman at quiver dot com
14 years ago
As this function gets a 'mixed' variable type for the column index, you may use an integer to represent the column number. In this case, the count is starting from 1 and not from zero.
I am not sure, but I think this method is a bit faster than using the column name.
For an example, see the OCINumCols first example.
To Top