(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().