PHP Conference Nagoya 2025

oci_define_by_name

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

oci_define_by_nameAsocia una variable de PHP con una columna para la obtención de consultas

Descripción

oci_define_by_name(
    resource $statement,
    string $column_name,
    mixed &$variable,
    int $type = SQLT_CHR
): bool

Asocia una variable de PHP con una columna para la obtención de consultas usando oci_fetch().

La llamada a oci_define_by_name() debe ocurrir antes que la ejecución de oci_execute().

Parámetros

statement

Un identificador de sentencia de OCI8 válido creado por oci_parse() y ejecutado por oci_execute(), o un identificador de sentencia de REF CURSOR.

column_name

El nombre de la columna usada en la consulta.

Use los nombres de columnas predeterminados de Oracle, en mayúsculas e insensibles al uso de mayúsculas/minúsculas. Use los nombres de columna exactos para nombres de columnas sensibles al uso de mayúsculas/minúsculas.

variable

La variable de PHP que contendrá el valor de la columna devuelta.

type

El tipo de dato a devolver. Generalmente no es necesario. Observe que no se lleva a cabo la conversión de datos estilo Oracle. Por ejemplo, SQLT_INT será ignorado, y el tipo de dato devuelto continuará siendo SQLT_CHR.

Opcionalmente se puede usar oci_new_descriptor() para asignar descriptores LOB/ROWID/BFILE.

Valores devueltos

Devuelve true en caso de éxito o false en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de oci_define_by_name()

<?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);

// Las definiciones DEBEN hacerse antes de la ejecución
oci_define_by_name($stid, 'LOCATION_ID', $locid);
oci_define_by_name($stid, 'CITY', $city);

oci_execute($stid);

// Cada obtención rellena las variables anteriormente definidas con los datos de la siguiente fila
while (oci_fetch($stid)) {
echo
"La ubicación del id $locid es $city<br>\n";
}

// Se muestra:
// La ubicación del id 1000 es Roma
// La ubicación del id 1100 es Venice

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

?>

Ejemplo #2 oci_define_by_name() con nombres de columna sensibles al uso de mayúsculas/minúsculas

<?php

/*
Antes de ejecutarlo, cree la tabla con un nombre de columna sensible al uso de mayúsculas/minúsculas
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 * FROM mytab');

// Use mayúsculas para nombres de columnas insensible al uso de mayúsculas/minúsculas
oci_define_by_name($stid, 'ID', $id);

// Use el nombre exacto para nombres de columnas sensible al uso de mayúsculas/minúsculas
oci_define_by_name($stid, 'MyDescription', $mydesc);

oci_execute($stid);

while (
oci_fetch($stid)) {
echo
"El id $id es $mydesc<br>\n";
}

// Se muestra:
// El id 1 es Iced Coffee

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

?>

Ejemplo #3 oci_define_by_name() con columnas de tipo LOB

<?php

/*
Antes de ejecutarlo, cree la tabla:
CREATE TABLE mytab (id NUMBER, fruit CLOB);
INSERT INTO mytab (id, fruit) values (1, 'manzana');
INSERT INTO mytab (id, fruit) values (2, 'naranaja');
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 * FROM mytab');

// Las definiciones DEBEN hacerse antes de la ejecución
oci_define_by_name($stid, 'ID', $id);
oci_define_by_name($stid, 'FRUIT', $fruta); // $fruta será un descriptor LOB

oci_execute($stid);

while (
oci_fetch($stid)) {
echo
$id . " es " . $fruta->load(100) . "<br>\n";
}

// Se muestra:
// 1 es manzana
// 2 es naranaja

$fruta->free();
oci_free_statement($stid);
oci_close($conn);

?>

Ejemplo #4 oci_define_by_name() con un tipo explícito

<?php

/*
Antes de ejecutarlo, cree la tabla:
CREATE TABLE mytab (id NUMBER, fruit CLOB);
INSERT INTO mytab (id, fruit) values (1, 'manzana');
INSERT INTO mytab (id, fruit) values (2, 'naranaja');
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 * FROM mytab');

// Las definiciones DEBEN hacerse antes de la ejecución
oci_define_by_name($stid, 'ID', $id);

$fruta = oci_new_descriptor($conn, OCI_D_LOB);
oci_define_by_name($stid, 'FRUIT', $fruta, OCI_D_CLOB);

oci_execute($stid);

while (
oci_fetch($stid)) {
echo
$id . " es " . $fruta->load(100) . "<br>\n";
}

// Se muestra:
// 1 es manzana
// 2 es naranaja

$fruta->free();
oci_free_statement($stid);
oci_close($conn);

?>

Ver también

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top