Подключение к базе Oracle 11g с помощью PHP?

Ссылка скопирована
20 февраля 2026 1 ответ

[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

  • TamTAm1, перезапускали пых после установки? Модуль активирован?
    Смотрите phpinfo
  • Перезапускал apache.
    В phpinfo

    Подключение к базе Oracle 11g с помощью PHP?

  • 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 и подключение проходит без ошибки.
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Артём Dev Ответ

    Для подключения к базе данных 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);

    // Устанавливаем параметры подключения $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-запросы. Не забывайте обработать ошибки и закрыть соединение после завершения работы с базой данных.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно