Подключение к базе Oracle 11g с помощью PHP?
[root@portalgtm pdo_oci]# php -v
PHP 7.4.11 (cli) (built: Sep 29 2020 10:17:06) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.11, Copyright (c), by Zend Technologies
[root@portalgtm pdo_oci]# php -i | grep oci
/etc/php.d/oci8.ini,
/etc/php.d/pdo_oci.ini
oci8
oci8.connection_class => no value => no value
oci8.default_prefetch => 100 => 100
oci8.events => Off => Off
oci8.max_persistent => -1 => -1
oci8.old_oci_close_semantics => Off => Off
oci8.persistent_timeout => -1 => -1
oci8.ping_interval => 60 => 60
oci8.privileged_connect => Off => Off
oci8.statement_cache_size => 20 => 20
PDO drivers => mysql, odbc, pgsql, sqlite, oci
PWD => /home/install-11/php-7.4.11/ext/pdo_oci
$_SERVER['PWD'] => /home/install-11/php-7.4.11/ext/pdo_oci
Подключение к базе
<?php $tns = " (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = IP адрес)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = SID) ) ) "; $db_username = "login"; $db_password = "passwd"; //$; try{ $conn = new PDO("oci:dbname=" . $tns . ";charset=utf8",$db_username,$db_password,); $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); }catch(PDOException $e){ echo ($e->getMessage()); } ?> При подключении выходит ошибка could not find driver. <img src="https://habrastorage.org/webt/65/32/26/653226d61056a278043331.png" alt="image"/> <img src="https://habrastorage.org/webt/65/32/26/653226dc1c380105574768.png" alt="image"/> Сервер видит библиотеки оракла но в phpinfo нет. |
<?php $tns = " (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = IP адрес)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = SID) ) ) "; $db_username = "login"; $db_password = "passwd"; //$; try{ $conn = new PDO("oci:dbname=" . $tns . ";charset=utf8",$db_username,$db_password,); $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); }catch(PDOException $e){ echo ($e->getMessage()); } ?> При подключении выходит ошибка could not find driver. <img src="https://habrastorage.org/webt/65/32/26/653226d61056a278043331.png" alt="image"/> <img src="https://habrastorage.org/webt/65/32/26/653226dc1c380105574768.png" alt="image"/> Сервер видит библиотеки оракла но в phpinfo нет.
Дополнительно:
Ну судя по ошибке у вас не хватает расширения pdo для оракла
pdo-oci
[root@portalgtm modules]# php -i | grep pdo
/etc/php.d/20-pdo.ini,
/etc/php.d/30-pdo_mysql.ini,
/etc/php.d/30-pdo_odbc.ini,
/etc/php.d/30-pdo_pgsql.ini,
/etc/php.d/30-pdo_sqlite.ini,
/etc/php.d/pdo_oci.ini
API Extensions => mysqli,pdo_mysql,mysql
pdo_mysql
pdo_mysql.default_socket => /var/lib/mysql/mysql.sock => /var/lib/mysql/mysql.sock
pdo_pgsql
pdo_sqliteПо пути /usr/lib64/php/modules
[root@portalgtm modules]# ll -s | grep oci
880 -rwxr-xr-x 1 root root 898408 окт 19 09:41 oci8.so
200 -rwxr-xr-x 1 root root 200968 окт 16 09:17 pdo_oci.so
Смотрите phpinfo
В phpinfo
yum install php-pdo-oci
Phpinfo покажет подключённые модули, если их нет, то надо дописать расширение в php.ini .
Не помню как там в центе. В деб для расширений отдельные файлы и симлинки на включение
Посмотрите в /etc/php
- В php.ini добавляю строку extension=/usr/lib64/php/modules/pdo_oci.so
Перезапускаю apache и ввожу команду php -v и вывод:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/pdo_oci.so' (tried: /usr/lib64/php/modules/pdo_oci.so (/usr/lib64/php/modules/pdo_oci.so: undefined symbol: php_pdo_unregister_driver), /usr/lib64/php/modules//usr/lib64/php/modules/pdo_oci.so.so (/usr/lib64/php/modules//usr/lib64/php/modules/pdo_oci.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP 7.4.11 (cli) (built: Sep 29 2020 10:17:06) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.11, Copyright (c), by Zend Technologies - В php.ini добавляю строку extension=pdo_oci
Перезапускаю apache и ввожу команду php -v и вывод:
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_oci' (tried: /usr/lib64/php/modules/pdo_oci (/usr/lib64/php/modules/pdo_oci: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/pdo_oci.so (/usr/lib64/php/modules/pdo_oci.so: undefined symbol: php_pdo_unregister_driver)) in Unknown on line 0
PHP 7.4.11 (cli) (built: Sep 29 2020 10:17:06) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.11, Copyright (c), by Zend Technologies - TamTAm1, удалите строку и используйте apache phpenmod
Нужно будет и апач перезапускать и пых - TamTAm1, сам php.ini должен быть в папке апача
- Дмитрий, Применил команду service php-fpm restart. И до команды в php.ini добавил строку extension_dir="/use/lib64/php/modules/"
В phpinfo появились дополнительные строки про oci8 и подключение проходит без ошибки.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Для подключения к базе данных Oracle 11g с помощью PHP, вам необходимо использовать расширение OCI8. Вот пример кода, который показывает, как это можно сделать:
// Устанавливаем параметры подключения $db_user = 'ваше_имя_пользователя'; $db_pass = 'ваш_пароль'; $db_host = 'адрес_сервера_базы_данных'; $db_name = 'имя_базы_данных'; // Подключаемся к базе данных $conn = oci_connect($db_user, $db_pass, $db_host.'/'.$db_name); // Проверяем успешность подключения if (!$conn) { $e = oci_error(); trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); } // Теперь можно выполнять SQL-запросы $query = 'SELECT * FROM таблица'; $stid = oci_parse($conn, $query); oci_execute($stid); // Обрабатываем результат while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) { foreach ($row as $item) { echo $item; } } // Закрываем соединение oci_free_statement($stid); oci_close($conn);
Убедитесь, что расширение OCI8 установлено на вашем сервере и включено в настройках PHP. Также убедитесь, что вы используете правильные данные для подключения (имя пользователя, пароль, адрес сервера базы данных и имя базы данных).
Этот пример кода позволит вам подключиться к базе данных Oracle 11g с помощью PHP и выполнять SQL-запросы. Не забывайте обработать ошибки и закрыть соединение после завершения работы с базой данных.