(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_new_connect — Устанавливает новое соединение с сервером Oracle
$username
,$password
,$connection_string
= null
,$encoding
= "",$session_mode
= OCI_DEFAULT
Создаёт новое соединение с сервером Oracle и выполняет вход.
В отличие от oci_connect() и oci_pconnect(), функция oci_new_connect() не кеширует соединения и при каждом вызове устанавливает новое соединение. Это полезно, если приложению необходима транзакционная изоляция двух наборов запросов.
username
Имя пользователя Oracle.
password
Пароль пользователя username
.
connection_string
Содержит
экземпляр Oracle
для подключения. Это может быть
» Easy Connect
string, или Connect Name из файла
tnsnames.ora, или имя локального экземпляра Oracle.
Если не указано отдельно или null
, PHP использует
переменные окружения, такие как TWO_TASK
(на Linux)
или LOCAL
(на Windows)
и ORACLE_SID
для определения
экземпляра Oracle
для соединения.
Для использования метода Easy Connect, PHP должен быть слинкован с клиентскими библиотеками версии Oracle
10g или старше. Easy Connect string для Oracle 10g принимает следующую форму:
[//]host_name[:port][/service_name]. Начиная с Oracle 11g синтаксис таков:
[//]host_name[:port][/service_name][:server_type][/instance_name].
В Oracle 19c были введены дополнительные параметры, включая настройки времени ожидания и проверки активности.
Обратитесь к документации Oracle. Названия служб могут быть определены с помощью запуска Oracle утилиты lsnrctl status
на сервере базы данных.
Файл tnsnames.ora может находиться в поисковом пути Oracle Net, который включает
/your/path/to/instantclient/network/admin,
$ORACLE_HOME/network/admin и /etc. В качестве альтернативного варианта
можно установить TNS_ADMIN
таким образом, чтобы путь $TNS_ADMIN/tnsnames.ora был читаемым.
Убедитесь, что веб-сервер имеет доступ к этому файлу.
encoding
Определяет кодировку, которую будут использовать клиентские библиотеки Oracle. Кодировка не обязательно должна совпадать с кодировкой самой базы данных. Oracle сделает всё возможное, чтобы преобразовать данные из или в эту кодировку, если кодировка не совпадает. В зависимости от кодировок это не всегда даёт приемлемые результаты. Преобразование также занимает некоторое время.
Клиентские библиотеки Oracle будут определять кодировку из переменной окружения NLS_LANG
,
если кодировку не указали.
Передача аргумента часто уменьшает время, которое тратится на соединение.
session_mode
Параметр доступен
с PHP 5 (PECL OCI8 1.1) и принимает следующие значения: OCI_DEFAULT
,
OCI_SYSOPER
и OCI_SYSDBA
. Если указали
OCI_SYSOPER
или OCI_SYSDBA
, функция попытается установить
привилегированное соединение через внешние данные авторизации. По умолчанию привилегированные
соединения отключены. Чтобы их включить, устанавливают
oci8.privileged_connect
в On
.
В версии PHP 5.3 (PECL OCI8 1.3.4) появилась константа OCI_CRED_EXT
как значение режима.
Этот режим говорит Oracle использовать внешнюю аутентификацию или аутентификацию операционной системы,
которую требуется настроить в базе данных.
Флаг OCI_CRED_EXT
разрешается использовать только с именем пользователя "/"
и пустым паролем.
Опиция oci8.privileged_connect принимает
значение On
или Off
.
Режим OCI_CRED_EXT
разрешается объединять с режимами OCI_SYSOPER
и OCI_SYSDBA
.
Режим OCI_CRED_EXT
не поддерживается в Windows по соображениям безопасности.
Возвращает идентификатор соединения или false
в случае возникновения ошибки.
Версия | Описание |
---|---|
8.0.0, PECL OCI8 3.0.0 |
connection_string теперь допускает значение null.
|
Приведённый ниже пример иллюстрирует как использовать обособленные соединения.
Пример #1 Пример использования oci_new_connect()
<?php
// создайте таблицу mytab (mycol number);
function query($name, $c)
{
echo "Выполнение $name\n";
$s = oci_parse($c, "select * from mytab");
oci_execute($s, OCI_NO_AUTO_COMMIT);
$row = oci_fetch_array($s, OCI_ASSOC);
if (!$row) {
echo "Нет данных\n";
} else {
do {
foreach ($row as $item)
echo $item . " ";
echo "\n";
} while (($row = oci_fetch_array($s, OCI_ASSOC)) != false);
}
}
$c1 = oci_connect("hr", "welcome", "localhost/orcl");
$c2 = oci_new_connect("hr", "welcome", "localhost/orcl");
$s = oci_parse($c1, "insert into mytab values(1234)");
oci_execute($s, OCI_NO_AUTO_COMMIT);
query("основного соединения", $c1);
query("нового соединения", $c2);
oci_commit($c1);
query("нового соединения после commit", $c2);
// Выведет:
// Выполнение основного соединения
// 1234
// Выполнение нового соединения
// Нет данных
// Выполнение нового соединения после commit
// 1234
?>
Дополнительные примеры можно найти в описании функции oci_connect().