(PHP 5, PECL OCI8 >= 1.1.0)
oci_define_by_name — Asocia una variable de PHP con una columna para la obtención de consultas
$statement
, string $column_name
, mixed &$variable
[, int $type
= SQLT_CHR
] )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().
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.
Devuelve TRUE
en caso de éxito o FALSE
en caso de error.
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);
?>
Nota:
En versiones de PHP anteriores a la 5.0.0 use ocidefinebyname() en su lugar. El nombre antiguo de la función todavía puede ser utilizado en versiones actuales, sin embargo es obsoleto y no se recomienda.