How to connect an Oracle database from PHP
One important thing: If you want to connect to a remote Oracle server then you need to install the Oracle Instant Client. More information and a link to OIC here: de.php.net/manual/en/oci8.requirements.php
6 Answers 6
Forth link in google after searching for your exact questions brought up the following link: http://me2learn.wordpress.com/2008/10/18/connect-php-with-oracle-database/
I assumed you want to connect php with oracle databases. so, I give you two of file, this is represent a basic php-oracle for your reference. good luck!
PHP provides Oracle OCI8 functions. Other options are PDO with the Oracle Driver and (if oracle supports it) ODBC.
I have created a connection in easiest way as follows:
Step 1. Determine what PHP bit version (32-bit or 64-bit) you are running. If PHP_INT_SIZE is value of 4, then version is 32-bit. If PHP_INT_SIZE is value of 8, then version is 64-bit. Use the following code below:
Step 2. Download the «InstantClient Package — Basic» for Windows from the [OTN InstantClient page][1]. Make sure you download the corresponding bit-version from step 1.
Step 3. Unzip the InstantClient files to C:\instantclient_11_2 and edit the Windows PATH environment to include C:\instantclient_11_2 . For example, on Windows XP, follow `Start > Control Panel > System >
Advanced > Environment Variables` and edit `PATH` in the `System` > variables list.
Step 3. In your `php.ini` file, enable the following lines:
extension=php_oci8_11g.dll extension=php_openssl.dll Finally, restart your Apache server. http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
Установка расширений OCI8 и PDO_OCI для PHP5
В настоящее время я работаю в компании, которая очень любит использовать в проектах на PHP СУБД Oracle, причем иногда версии 11g.
Большая часть разработчиков этой компании работает под ОС Windows. За последний месяц несколько из них решили приобщиться к Linux и поставили себе Ubuntu. По прошествии нескольких дней после установки самой ОС, ребята столкнулись с задачей установки драйверов PHP для работы с СУБД Oracle — OCI8 и PDO_OCI на базе Oracle instant client 11.2, которую не смогли решить самостоятельно.
Я не нашел подробного, полностью рабочего мануала на русском, по которому новичок в Linux смог бы выполнить все манипуляции сам. В результате мне пришлось несколько раз проделать серию одних и тех же действий на их машинах и написать мануал, который я вам и представляю.
Мануал написан для пользователей Ubuntu Linux, но с некоторыми изменениями подойдет для пользователей большинства Linux’ов.
Подготовка к установке
- У вас должна быть возможность выполнять команды под администратором;
- У вас должен быть установлен php5 со следующими пакетами (команда установки со списком):
sudo apt-get install php5 php5-dev php-pear php5-cli
sudo pecl install pdo - У вас должна быть установлена библиотека libaio1:
sudo apt-get install libaio1
Установка Oracle instant client
- RPM пакет — Linux, CentOS, Fedora, Red Hat Enterprise Linux, Mandriva Linux, SUSE Linux и д.р. у кого есть поддержка RPM;
- ZIP архив — всем остальным.
- instantclient-basic — сам Oracle instant client
- instantclient-sdk — набор библиотек для разработки приложений под Oracle instant client
- instantclient-sqlplus — SQL*Plus
Перемещаем скачанные файлы в /opt/oracle и переходим в папку назначения (допустим что вы скачали «zip архивы» в папку «downloads» Вашего пользователя):
sudo mv ~/downloads/instantclient-*.zip /opt/oracle/
cd /opt/oracle/
Разархивируем все скачанные архивы:
sudo unzip instantclient-basic-*-*.zip
sudo unzip instantclient-sdk-*-*.zip
Если вы скачивали SQL*Plus:
sudo unzip instantclient-sqlplus-*-*.zip
В итоге в каталоге /opt/oracle был создан, для Oracle instant client 11.2.0.2.0, каталог instantclient_11_2. Переименуем этот каталог в instantclient (если у вас другая версия/каталог измените команду) и перейдем в него:
sudo mv instantclient_11_2 instantclient
cd instantclient
Далее необходимо создать несколько дополнительных каталогов и символьных ссылок для нормальной работы клиента (обратите внимание на версию и если она у вас другая измените команды):
sudo ln -s /opt/oracle/instantclient/libclntsh.so.* /opt/oracle/instantclient/libclntsh.so
sudo ln -s /opt/oracle/instantclient/libocci.so.* /opt/oracle/instantclient/libocci.so
sudo ln -s /opt/oracle/instantclient/ /opt/oracle/instantclient/lib
sudo mkdir -p include/oracle/11.2/
cd include/oracle/11.2/
sudo ln -s ../../../sdk/include client
cd —
sudo mkdir -p lib/oracle/11.2/client
cd lib/oracle/11.2/client
sudo ln -s ../../../ lib
cd —
Создаем конфигурационный файл, в котором будет указан каталог для поиска библиотек Oracle instant client, и подключаем его:
echo /opt/oracle/instantclient/ | sudo tee -a /etc/ld.so.conf.d/oracle.conf
sudo ldconfig
Так как в Ubuntu нет каталога /usr/include/php, а клиент его все равно ищет создадим символьную ссылку на его эквивалент php5:
sudo ln -s /usr/include/php5 /usr/include/php
Устанавливаем OCI8
После всех наших манипуляций расширение oci8 замечательно устанавливается с помощью команды pecl:
sudo pecl install oci8
нас просят ввести путь к Oracle instant client, на что необходимо ответить:
instantclient,/opt/oracle/instantclient
Создаём файл подключения расширения:
echo «; configuration for php oci8 module» | sudo tee /etc/php5/conf.d/oci8.ini
echo extension=oci8.so | sudo tee -a /etc/php5/conf.d/oci8.ini
Устанавливаем PDO_OCI
Для установки PDO_OCI нам сначала необходимо его скачать из репозитория pear.
Обновим список пакетов pear:
sudo pecl channel-update pear.php.net
Скачаем и поместим архив во временную директорию:
sudo mkdir -p /tmp/pear/download/
cd /tmp/pear/download/
sudo pecl download pdo_oci
Извлечем содержимое архива и перейдем к нему:
sudo tar xvf PDO_OCI*.tgz
cd PDO_OCI*
Здесь нам необходимо скорректировать файл config.m4, так как в нем нет данных о нашей версии Oracle instant client, последние изменения датируются 2005 годом. Запускаем любимый редактор и вносим изменения отмеченные «+» (обратите внимание на версию и если она у вас другая измените строчки):
sudo vim config.m4
Далее приведен diff двух файлов:
***************
*** 7,12 ****
— 7,14 —-
if test -s «$PDO_OCI_DIR/orainst/unix.rgs»; then
PDO_OCI_VERSION=`grep ‘»ocommon»‘ $PDO_OCI_DIR/orainst/unix.rgs | sed ‘s/[ ][ ]*/:/g’ | cut -d: -f 6 | cut -c 2-4`
test -z «$PDO_OCI_VERSION» && PDO_OCI_VERSION=7.3
+ elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.11.2; then
+ PDO_OCI_VERSION=11.2
elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.10.1; then
PDO_OCI_VERSION=10.1
elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.9.0; then
***************
*** 119,124 ****
— 121,129 —-
10.2)
PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
;;
+ 11.2)
+ PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
+ ;;
*)
AC_MSG_ERROR(Unsupported Oracle version! $PDO_OCI_VERSION)
;;
***************
Подготавливаем окружение для расширения php c помощью команды phpize (обратите внимание на версию, если она у вас другая измените):
sudo phpize
Конфигурируем установщик пакета и устанавливаем пакет (обратите внимание на версию, если она у вас другая измените):
sudo ./configure —with-pdo-oci=instantclient,/opt/oracle/instantclient/,11.2
sudo make
sudo make install
Создаём для него файл подключения:
echo «; configuration for php PDO_OCI module» | sudo tee /etc/php5/conf.d/pdo_oci.ini
echo extension=pdo_oci.so | sudo tee -a /etc/php5/conf.d/pdo_oci.ini
Подводим итоги
Перезапускаем apache и проверяем наличие установленных расширений:
sudo /etc/init.d/apache2 restart
php -m
Заключение
Мануал основан на вот этом посте, который был несколько переработан — исправлены ошибки и внесены дополнения.
Надеюсь, статья будет полезной не только моим коллегам по работе.
Connect PDO with Oracle database
I am new to Oracle, installed the Oracle today the 11g Express Edition. Then I installed Java SDK, and then the free Oracle SQL Developer. I connected with system account and created a username and table as defined below. I don’t exactly know how Oracle works, I think instead of database name, usernames are used. So below are details. Username/Connection/Database = CustomSearch
Table = Reservation_General_2 There are some columns inside that table and some data. but the point is I cant connect to Oracle Server. Here is how I tried to connect to database server.
What am I doing wrong, what steps should I take to fix this issue?
Update
I added the driver by removing semicolon from the php.ini
file
extension=php_pdo_oci.dll
The program can't start because OCI.dll is missing from your computer. Try reinstalling the program to fix this problem.
I have to click 4 time OK for different alert boxes that shows up. I also downloaded oci.dll and copied it to the windows/system32 , but still getting this error. What to do?
Update
http://www.oracle.com/technetwork/articles/dsl/technote-php-instant-12c-2088811.html
ERROR: SQLSTATE[HY000]: pdo_oci_handle_factory: ORA-12521: TNS:listener does not currently know of instance requested in connect descriptor (ext\pdo_oci\oci_driver.c:635)
try < $conn = new PDO('oci:dbname=//localhost:1521/xe/ORCL', 'customsearch', 'babaji'); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); > catch(PDOException $e) < echo 'ERROR: ' . $e->getMessage(); >
http://stackoverflow.com/questions/11970261/connect-oracle-with-pdo-with-sid-and-instance-name
Update 2
foreach(PDO::getAvailableDrivers() as $driver) echo $driver, '\n';
http://stackoverflow.com/questions/23239433/could-not-connect-to-oracle-using-pdo
Update 3
Again rolled back to old connection just changed some stuff in that connection and seems like connection to oracle worked.
try < $conn = new PDO("oci:dbname mt24 mb12">phporaclepdo