PHP 8.3.4 Released!

oci_define_by_name

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

oci_define_by_nameСопоставляет переменную PHP столбцу результата запроса

Описание

oci_define_by_name(
    resource $statement,
    string $column,
    mixed &$var,
    int $type = 0
): bool

Сопоставляет переменную PHP столбцу результата запроса, полученного с помощью oci_fetch().

Вызов oci_define_by_name() должен производиться до запуска oci_execute().

Список параметров

statement

Корректный идентификатор выражения OCI8, полученный из функции oci_parse() и исполненный функцией oci_execute(), или идентификатор выражения REF CURSOR.

column

Имя столбца использованного в запросе.

Используйте верхний регистр для стандартных регистронезависимых имён столбцов Oracle. Используйте точное написание имени столбца для регистрозависимых имён.

var

Переменная 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
"ID местоположения $locid - $city<br>\n";
}

// Выведет:
// ID местоположения 1000 - Roma
// ID местоположения 1100 - 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 - $mydesc<br>\n";
}

// Выведет:
// Идентификатор 1 - 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 станет дескриптором LOB

oci_execute($stid);

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

// Выведет:
// 1 - apple
// 2 - 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 . " - " . $fruit->load(100) . "<br>\n";
}

// Выведет:
// 1 - apple
// 2 - orange

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

?>

Смотрите также

  • oci_fetch() - Выбирает следующую строку из результата в буфер
  • oci_new_descriptor() - Инициализирует новый дескриптор объекта LOB или FILE

add a note

User Contributed Notes

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