Php with pdo oci

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’ов.

Читайте также:  Asset Management

Подготовка к установке

  1. У вас должна быть возможность выполнять команды под администратором;
  2. У вас должен быть установлен php5 со следующими пакетами (команда установки со списком):
    sudo apt-get install php5 php5-dev php-pear php5-cli
    sudo pecl install pdo
  3. У вас должна быть установлена библиотека 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

Читайте также:  Python maximum index in array

Далее приведен 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
)" data-controller="se-share-sheet" data-se-share-sheet-title="Share a link to this question" data-se-share-sheet-subtitle="" data-se-share-sheet-post-type="question" data-se-share-sheet-social="facebook twitter devto" data-se-share-sheet-location="1" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f4.0%2f" data-se-share-sheet-license-name="CC BY-SA 4.0" data-s-popover-placement="bottom-start">Share
)" title="">Improve this question
)">edited Mar 8, 2020 at 12:57
halfer
19.8k17 gold badges99 silver badges185 bronze badges
asked Sep 7, 2014 at 15:46
5
    Er. You don't install Oracle Instant Client by copying oci.dll to C:\Windows. Get the complete package from Oracle and follow the instructions.
    – Álvaro González
    Sep 8, 2014 at 10:23
    @ÁlvaroG.Vicario Can you please provide me the link to the complete package, so i can download and try to fix this problem.
    – Sizzling Code
    Sep 8, 2014 at 10:25
    You can get it from here: Oracle Instant Client
    – Álvaro González
    Sep 8, 2014 at 10:30
    @ÁlvaroG.Vicario i already have installed instantclient_12_1 as it was asked in tut, Also updated my Qustion, should i uninstall and install and another version of instant client?
    – Sizzling Code
    Sep 8, 2014 at 10:34
    I thought it was clear you already had the appropriate PDO driver installed and you only had to get Instant Client working. I'm unsure of what advice to offer now.
    – Álvaro González
    Sep 8, 2014 at 10:38
Add a comment|

5 Answers 5

Reset to default
12

Check PDO and OCI drivers installed properly or not

Try with following code

class PDOConnection < private $dbh; function __construct() < try < $server = "127.0.0.1"; $db_username = "SYSTEM"; $db_password = "Oracle_1"; $service_name = "ORCL"; $sid = "ORCL"; $port = 1521; $dbtns = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = $server)(PORT = $port)) (CONNECT_DATA = (SERVICE_NAME = $service_name) (SID = $sid)))"; //$this->dbh = new PDO("mysql:host=".$server.";dbname=".dbname, $db_username, $db_password); $this->dbh = new PDO("oci:dbname=" . $dbtns . ";charset=utf8", $db_username, $db_password, array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC)); > catch (PDOException $e) < echo $e->getMessage(); > > public function select($sql) < $sql_stmt = $this->dbh->prepare($sql); $sql_stmt->execute(); $result = $sql_stmt->fetchAll(PDO::FETCH_ASSOC); return $result; > public function insert($sql) < $sql_stmt = $this->dbh->prepare($sql); try < $result = $sql_stmt->execute(); > catch (PDOException $e) < trigger_error('Error occured while trying to insert into the DB:' . $e->getMessage(), E_USER_ERROR); > if ($result) < return $sql_stmt->rowCount(); > > function __destruct() < $this->dbh = NULL; > > $dbh = new PDOConnection(); $dbh->select($select_sql); $dbh->insert($insert_sql);

Источник

Оцените статью