(PHP 5, PHP 7, PECL OCI8 >= 1.1.0)
oci_define_by_name — Сопоставляет переменную PHP столбцу результата запроса
$statement
, string $column_name
, mixed &$variable
[, int $type
= SQLT_CHR
] )Сопоставляет переменную PHP столбцу результата запроса, полученного с помощью oci_fetch().
Вызов oci_define_by_name() должен производиться до запуска oci_execute().
statement
Корректный идентификатор выражения OCI8, полученный из oci_parse() и исполненный функцией oci_execute(), или идентификатор выражения REF CURSOR.
column_name
Имя столбца использованного в запросе.
Используйте верхний регистр для стандартных регистронезависимых имен столбцов Oracle. Используйте точное написание имени столбца для регистрозависимых имен.
variable
Переменная PHP, предназначенная для хранения возвращенного значения.
type
Тип возвращаемых данных. Обычно не требуется. Имейте ввиду, что преобразования Oracle-данных не производятся. К примеру, SQLT_INT будет проигнорировано и возвращенные данные будут по прежнему в виде SQLT_CHR.
Если вам нужно назначить переменную абстрактного типа данных (LOB/ROWID/BFILE), то ее необходимо сначала создать с помощью oci_new_descriptor().
Возвращает TRUE
в случае успешного завершения или FALSE
в случае возникновения ошибки.
Пример #1 Пример использования 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);
// Переменные ДОЛЖНЫ быть определены перед запуском
oci_define_by_name($stid, 'LOCATION_ID', $locid);
oci_define_by_name($stid, 'CITY', $city);
oci_execute($stid);
// Каждый результат запроса помещает в заранее определенную переменную следующую строку данных
while (oci_fetch($stid)) {
echo "Location id $locid is $city<br>\n";
}
// Выведет:
// Location id 1000 is Roma
// Location id 1100 is Venice
oci_free_statement($stid);
oci_close($conn);
?>
Пример #2 Пример использования oci_define_by_name() с регистрозависимыми именами столбцов
<?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 * FROM mytab');
// Используется верхний регистр для регистронезависимых имен столбцов
oci_define_by_name($stid, 'ID', $id);
// Используется точное написание для регистрозависимых имен столбцов
oci_define_by_name($stid, 'MyDescription', $mydesc);
oci_execute($stid);
while (oci_fetch($stid)) {
echo "id $id is $mydesc<br>\n";
}
// Выведет:
// id 1 is Iced Coffee
oci_free_statement($stid);
oci_close($conn);
?>
Пример #3 Пример использования oci_define_by_name() со столбцами типа LOB
<?php
/*
Перед запуском создаются таблицы:
CREATE TABLE mytab (id NUMBER, fruit CLOB);
INSERT INTO mytab (id, fruit) values (1, 'apple');
INSERT INTO mytab (id, fruit) values (2, 'orange');
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');
// Переменные ДОЛЖНЫ быть определены перед запуском
oci_define_by_name($stid, 'ID', $id);
oci_define_by_name($stid, 'FRUIT', $fruit); // $fruit will become a LOB descriptor
oci_execute($stid);
while (oci_fetch($stid)) {
echo $id . " is " . $fruit->load(100) . "<br>\n";
}
// Выведет:
// 1 is apple
// 2 is orange
$fruit->free();
oci_free_statement($stid);
oci_close($conn);
?>
Пример #4 Пример использования oci_define_by_name() с приведенными типами
<?php
/*
Перед запуском создается таблица:
CREATE TABLE mytab (id NUMBER, fruit CLOB);
INSERT INTO mytab (id, fruit) values (1, 'apple');
INSERT INTO mytab (id, fruit) values (2, 'orange');
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');
// Переменные ДОЛЖНЫ быть определены перед запуском
oci_define_by_name($stid, 'ID', $id);
$fruit = oci_new_descriptor($conn, OCI_D_LOB);
oci_define_by_name($stid, 'FRUIT', $fruit, OCI_D_CLOB);
oci_execute($stid);
while (oci_fetch($stid)) {
echo $id . " is " . $fruit->load(100) . "<br>\n";
}
// Выведет:
// 1 is apple
// 2 is orange
$fruit->free();
oci_free_statement($stid);
oci_close($conn);
?>