Php руководство по рнр 3 0 функции oracle


Содержание
Илон Маск рекомендует:  Что такое код hw_incollections

Как подружить PHP с Oracle

Всем привет! Возник вопрос как можно подключиться у ораклу из ПХП. Прочитал несколько инструкций все до 2010 года, в которых я уже запутаться успел.
Что сделал Oracle:
1) Скачал и поставил базу winx64_12201_database
2) Через PL/SQL Developer подключаюсь все работает

Что сделал PHP:
1) Поставил локальный сервер OpenServer
В настройках: Apache-2.4, PHP-5.6
2) php на работоспособность проверил по phpinfo() и тестовым скриптом

2) Поправил PHP.ini (снял комментарии):
extension=php_oci8_12c.dll
extension=php_pdo_oci.dll
extension_dir = «%sprogdir%/modules/php/%phpdriver%/ext/» — я так понял что это переменные сервера, а значит путь верный.
Модули в папке присутствуют.

Думал этого будет достаточно, но при попытке подключиться:

Получаю ошибку:
Fatal error: Call to undefined function OCILogon() in D:\prog\OpenServer\OSPanel\domains\Adventure\app\pages\php\connect-to-oracle.php on line 2

Получается, что он не видит модули или что то вроде этого.
В одном туториале видел что пытаются ко всему прикрутить instantclient_12_1, не понял зачем и не найдя подобной информации, решил обратиться к вам

function в oracle из php

Привет всем, такой вопрос как вызывая функцию oracle из php вернуть значение не стандартного типа.

т.е. из php вызываю функцию: $query = $this->db->query («select название_пакета.название_функции(:переменные) res from dual», $значения переменных);

В оракле в результате работы функции на выходе получается массив (не знаю как правильно это называется) вот такого типа:

Подскажите как мне его правильно принять, чтоб потом с ним работать или как-то в json строку все это добро переделать и потом уже её передавать в php.

1 ответ 1

К сожалению так объявленный тип данных (массив) можно использовать только внутри PL/SQL блоков. В запросах его использовать нельзя. Для использования в запросах и передачи в PHP надо использовать объектный тип, создаваемый глобально. К сожалению вы не указали, какая именно информация из этого массива нужна. Предположим вам нужны и сами строки и их индексы в массиве. Тогда нам надо создать два типа: объект представляющий строку и коллекцию таких объектов:

Если вам нужны только сами строки, а индексы не нужны, то вместо своего можно воспользоваться системным типом ODCIVarchar2List .

Далее надо либо переделать вашу функцию в пакете, что бы она возвращала строки этого типа, либо если ее менять нельзя, сделать функцию обертку, которая получит массив от изначальной функции и вернет его в подходящем виде. Для возврата массивов для меньшего расхода памяти настоятельно рекомендуется использовать pipelined функции. Такие функции возвращают результат постепенно, по мере его использования, а не формируют целиком весь массив и потом возвращают. Функция будет выглядеть примерно так:

И наконец мы можем использовать функцию как обычную таблицу, для возврата результата в PHP (возвращаются колонки с именами key и val, как описано в нашем типе):

Вызов кода PL/SQL из других языков: Java, Perl, PHP, C

Рано или поздно вам захочется вызвать код (скрипт) PL/SQL из кода C, Java, Perl, PHP или другого языка. Потребность вполне естественная, но если вам когда-нибудь приходилось создавать приложения с межъязыковыми вызовами, то вы наверняка сталкивались с различными нюансами преобразования типов данных разных языков (в первую очередь составных типов — массивов, записей, объектов и т. д.), не говоря уже о различиях в семантике параметров или специфичных для конкретного производителя расширений «стандартных» API, в частности Microsoft ODBC.

Рассмотрим несколько примеров использования PL/SQL во внешнем коде. Допустим, у нас имеется функция PL/SQL, которая получает код ISBN в строковом формате и возвращает заголовок соответствующей ему книги:

В SQL*Plus существует несколько способов вызова этой функции. Простейший способ:

Давайте посмотрим, как вызвать эту функцию в следующих средах:

  • C, с использованием прекомпилятора Oracle (Pro*C);
  • Java, с использованием JDBC;
  • Perl, с использованием интерфейсного модуля Perl DBI и драйвера DBD::Oracle;
  • PHP;
  • PL/SQL Server Pages.

Учтите, что примеры написаны исключительно в учебных целях — например, имя пользователя и пароль в них жестко закодированы, и программы просто направляют результат в стандартный выходной поток. Более того, я даже не стану подробно описывать каждую строку кода. Тем не менее эти примеры дают некоторое представление о том, какие схемы вызова PL/SQL могут использоваться в разных языках.

C, с использованием прекомпилятора Oracle (Pro*C)

Oracle предоставляет как минимум два разных внешних интерфейса для языка C: один называется OCI (Oracle Call Interface) и ориентируется в основном на программистов экстра-класса, а другой — Pro*C. В состав OCI входит множество функций для выполнения таких низкоуровневых операций, как открытие и разбор данных, привязка, выполнение, выборка. и все это для реализации лишь одного запроса! Поскольку простейшая программа на базе OCI, выполняющая не самую сложную задачу, содержит около 200 строк кода, мы рассмотрим пример использования Pro*C. Pro*C базируется на технологии прекомпиляции, позволяющей совмещать в исходном коде операторы языков C, SQL и PL/SQL. Такие файлы обрабатываются программой Oracle proc, которая преобразует их в код на языке C:

Как видите, Pro*C вряд ли приведет в восторг блюстителей чистоты языка C. Однако во многих компаниях считают, что Pro*C (или Pro*Cobol, или прекомпиляторы для других поддерживаемых Oracle языков программирования) может служить разумной альтернативой Visual Basic (слишком медленный и неуклюжий) и OCI (слишком сложный).

Лучшим источником информации о Pro*C является документация Oracle.

Java, с использованием JDBC

Как и в случае с C, Oracle поддерживает несколько разных методов подключения к базе данных из кода Java. Один из них — встроенный синтаксис SQL, называемый SQLJ — близок к другим прекомпиляторным технологиям Oracle, хотя и более удобен для отладки. Большей популярностью пользуется метод доступа к базе данных, называемый JDBC (на самом деле это название ничего не означает, хотя его часто расшифровывают как «Java Database Connectivity»):

В этом примере используется «тонкий» драйвер, отличающийся прекрасной совместимостью и простотой установки (все необходимое для сетевых протоколов имеется в библиотеке Java) — но за счет производительности передачи данных. В качестве альтернативы можно использовать так называемый драйвер OCI. Пусть вас не пугает название — он совсем не так сложен, как одноименный интерфейс, упоминавшийся в предыдущем разделе.

Perl, с использованием Perl DBI и DBD::Oracle

Столь популярный в сообществе системных администраторов язык Perl можно назвать прародителем всех языков с открытым исходным кодом. Сейчас, в версии 5.10, он может практически все и распространен, кажется, повсеместно. А благодаря таким удобным средствам, как CPAN (Comprehensive Perl Archive Network — обширный сетевой архив ресурсов для языка Perl), ничего не стоит установить интерфейсные модули типа DBI (DataBase Interface) и соответствующий драйвер Oracle, DBD::Oracle.

С другой стороны, код Perl часто оказывается совершенно неудобочитаемым. К тому же этот язык не отличается ни быстротой, ни компактностью кода, хотя компилируемые версии по крайней мере решают проблему быстродействия.

За дополнительной информацией о взаимодействии между Perl и Oracle обращайтесь к книге Programming the Perl DBI (автор Alligator Descartes и Tim Bunce). О языке Perl написано немало превосходных книг, не говоря уже о сетевых ресурсах perl.com (сайт O’Reilly), perl.org и cpan.org.

PHP, с использованием расширений Oracle

Многие разработчики, использующие бесплатный и невероятно популярный веб-сервер Apache, также являются завзятыми сторонниками бесплатного и невероятно популярного языка программирования PHP. Язык PHP, часто применяемый для построения динамических веб-страниц, также может использоваться для построения графических приложений или выполнения программ командной строки. Как и следовало ожидать, Oracle поддерживается в PHP наряду со многими другими базами данных. Более того, компания Oracle объединила усилия с Zend для включения «официально одобренной» поддержки Oracle в PHP1.

В следующем примере используется семейство функций PHP, объединенных общим названием OCI8. Пусть цифра «8» в названии вас не смущает; функции должны работать со всеми версиями Oracle, от Oracle7 до 11g.

При выполнении в командной строке результат выглядит примерно так:

Кстати говоря, функции Oracle OCI недоступны в PHP по умолчанию. Тем не менее ваш системный администратор без труда построит PHP с расширениями Oracle.

За дополнительной информацией обращайтесь по адресу http://www.php.net или к многочисленным книгам издательства O’Reilly по этой теме. Рекомендации по работе с Oracle из PHP приведены на сайте Oracle Technology Network.

PL/SQL Server Pages

Хотя технология PL/SQL Server Pages (PSP) запатентована Oracle, я решил упомянуть о ней, потому что она позволяет быстро создать работоспособную веб-страницу. Она так-же основана на прекомпиляции и позволяет вставлять код PL/SQL в HTML-страницы.

Конструкция означает: «обработать как фрагмент PL/SQL и включить результат в страницу».

Если приведенная страница будет правильно установлена на веб-сервере, подключенном к базе данных Oracle, то страница будет выглядеть так, как показано на рис. 1.

Технология PL/SQL Server Pages пришлась по душе многим программистам и пользователям, так как она позволяет быстро и удобно создавать сайты.

За дополнительной информацией обращайтесь к книге Learning Oracle PL/SQL, написанной теми же авторами, что и книга, которую вы сейчас читаете.

Что же дальше?

Итак, вы познакомились ранее с примерами использования PL/SQL в SQL*Plus и в других распространенных средах и языках программирования. Кроме того, код PL/SQL можно:


  • встраивать в программы на языках COBOL и FORTRAN с последующей обработкой прекомпилятором Oracle;
  • вызывать из языка Visual Basic с помощью разновидности ODBC;
  • вызывать из языка программирования Ada с помощью технологии, называемой SQL*Module;
  • выполнять автоматически по триггерам событий, происходящих в базе данных Oracle (например, при обновлении таблицы);
  • включать в расписание для выполнения в базе данных Oracle с использованием встроенного пакета DBMS_SCHEDULER;
  • использовать для манипуляций с содержимым TimesTen — технологии работы с базой данных в памяти, приобретенной Oracle Corporation. С ее содержимым можно работать из кода PL/SQL, как и с реляционными базами данных.

Php руководство по рнр 3 0 функции oracle

Как установить связку PHP+Oracle под Windows для чайников

Понадобилось установить на локальные машины связку PHP+Oracle. Промучилась два дня, изображая собою человечка, бьющегося головой о монитор — наконец все заработало. Записываю все ходы и хаки, чтобы потом не забыть (да и мало ли вдруг еще кому пригодится).
Кажется, вся эта информация в сборе собирается и публикуется в одном месте впервые :). Мне пришлось ее выискивать и интегрировать из сотен разных источников :).

Итак, установка связки PHP с Oracle за 10 простых шагов!

1. IP-Адрес и Порт-форвардинг.
— Если за компьютером, на который ставится Oracle не закреплен жестко локальный IP-адрес, заходим в панель управления нашим роутером или каким иным устройством, которое обеспечивает локальную сеть и раздает IP-адреса. Делаем Address reservation. Привязываем жестко текущий IP-адрес машины к ее MAC. На моем роутере TPLink оно в пункте меню DHCP.
— Делаем Port-Forwarding для порта 1521 (на котором будет слушать Oracle listener) для машины, на которую ставится Oracle. Если возможности настроить forwarding нет, то пока откладываем это дело, может оно и так заработает.

2. Установка Oracle11gR2 на Win7 x64.
Просто тупо качаем отсюда два файла Databse, один файл Client, оба x64, ставим все по умолчанию.
Оно в процессе тестирует system requirements и говорит что все Failed. Тупо игнорим. Вообще игнорим все, что у него там не получается. Все прекрасно ставится в итоге, не смотря на ругань. Только сообщения с руганью лучше всего принтскринить и сохранять, могут потом пригодиться, если вдруг что.
На каком-то из последних шагов предгалает ввести кучу паролей для кучи каких-то юзеров. Я их все ввела простые и одинаковые, на всякий случай.

Илон Маск рекомендует:  Что такое код odbc_free_result

3. Проверка связи.
Запускаем из командной строки sqlplus без параметров.
Если пишет кракозябрами вместо русских буковок, есть два варианта решения проблемы:
— Изменить шрифт командной строки с нормального на дурацкий через системное меню окошка, потом вызвать chcp, посмотреть что за кодировка (должна быть 866), вызвать chcp 1251 — должна встать, после чего sqlplus будет общаться по русски, но дурацким шрифтом.
— Изменить язык с русского на английский с помощью regedit:
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_O raDb11g_home1
NLS_LANG AMERICAN_AMERICA.CL8MSWIN1251

Вводим юзера system, пароль (который вводили везде на шаге 2), базу данных (если спросит) orcl.
Если не коннектит, идем биться головой о монитор и гуглить.
Пишем ему connect system/Тот_самый_пароль@orcl
Если коннектит, то все ок. Если не коннектит, идем снова биться головой о монитор и гуглить, гуглить до посинения.

Выходим из этой байды покамест, она уже для работы, а не для установки.

4. Настройка Oracle Listener-а для возможности коннектов с других машин в локальной сети.
Идем в директорию %ORACLE%\product\11.2.0\dbhome_1\NETWORK\A DMIN
— Открываем файл listener.ora
Находим строчку
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
и копипаст ее, в копии вместо localhost пишем адрес машины в локальной сети, который мы к ней привязали на шаге 1., например:
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.101)(PORT = 1521))
Должно получить нечто вроде того:

5. Проверка что получилось.
— Идем в Службы Windows.
Находим там службу OracleOraDb11g_home1TNSListener
И перезапускаем ее, чтобы включились новые настройки из listener.ora.

— В командной строке запускаем lsnrctl
Скармливаем ему команду status
Должно получиться нечто вроде того:

Если все получилось, то все ок и работает, можно выходить и из этой байды. Если не получилось — ну, понятно, все снова как всегда.

6. Скачивание InstantClient (Это совсем другая байда, нежели Oracle Database Client, скачанный и установленный на шаге 2!)
Качаем InstantClient отсюда. 32-х разрядный! Так как php — 32-х разрядный — и с x64-InstantClient работать тупо не будет. x64-php для windows — это большая редкость, говорят. Не проверяла, мне достаточно своего родного 32-php. Так что пусть будет все 32-х.

7. Юзаем хак, подробно описанный здесь. Без оного хака php отказывается подключать oci8, сообщая, что-де php_oci8.dll не является приложением Win32 :).
Страничка в интернете вещь ненадежная, поэтому цитирую оттуда самое важное:

1. Unzip Oracle Instant Client 32-bit and move it to C:\WINDOWS\SYSWOW64\INSTANTCLIENT_11_2. You may need to do this in a console with elevated permissions.
2. Edit your PATH environment variable and insert C:\WINDOWS\SYSTEM32\INSTANTCLIENT_11_2 in the directory list before the entry for the Oracle Home library.

Windows makes it so all 32-bit applications that reference C:\WINDOWS\SYSTEM32 actually see the contents of the C:\WINDOWS\SYSWOW64 directory. Your 64-bit database won’t find an Instant Client in the real, physical C:\WINDOWS\SYSTEM32 directory and will continue to use the database libraries.

8. Подключение php_oci8
— Раскомментируем в php.ini строчку
extension=php_oci8.dll

— Записываем в переменную окружения PATH X:\php;X:\php\ext; (путь к php у кого какой, «X:\php» для примера) — если оно там вдруг не было записано ранее.
Находится она, PATH, через Панель управления — Система — Дополнительные параметры — Дополнительно — Переменные среды

— Рестартим апачу, смотрим что в error.log. Если там не ругается на oci8 — вызываем из скрипта php echo phpinfo(); и смотрим что пишут про oci8. Если ругается, то гуглим и бьемся головой о монитор :)

9. Проверка связи!
— Мучительно ползем обратно в директорию %ORACLE%\product\11.2.0\dbhome_1\NETWORK\A DMIN и открываем файл tnsnames.ora. Находим там примерно такую ботву:

Жирненьким выделено так называемое имя сервиса (оно, кстати, задается при инсталляции Oracle Database, но я продуплила его изменить, такое вот выросло по умолчанию), которое нам надо тщательно запомнить для дальнейших манипуляций с коннектами.

— Создаем скрипт php примерно такой:

— Запускаем скрипт. Если все ок, то оно так и напишет, что ОК — значит у нас почти все уже, наконец, получилось. А если не ок, то — снова биться головой о монитор и всякое такое, малоэстетичное.

10. Уффф! Теперь бы нам хотелось что-то phpmyadmin-образное для Oracle.
Ползем, совсем уже обалдевшие от всей этой мегаботвы, сюда. Качаем сборку, там один файл .php, ставим под апач, запускаем. Нам показывают формочку для входа.
В System выбираем Oracle.
В Server пишем localhost/orcl.168.1.101
Username — system
Password — понятно что.
Database — оставляем пустым, ничего не пишем туда.
Жмем Login. Если все ок — то любуемся интерфейсом и нутром Oracle в привычной юзер-френдли среде. Если не ок, то ложимся спать, потому что поздно уже, хватит, все, basta, that’s enough!

11. Упс! Что-то в 10 шагов не уложились. Разрешение на коннект с Oracle с других машин в локальной сети.
У Windows-а есть брандмауэр. Панель управления — Брандмауэр Windows — Разрешить запуск программ бла-бла. Кнопочка «Разрешить другую программу», затем кнопочка «Обзор». Мучительно ищем по директориям директорию %ORACLE%\product\11.2.0\dbhome_1\BIN. Мучительно находим там файл TNSLSNR.EXE, добавляем, подтверждаем, ок, ок, уффф.

12. Настройка подключения к Oracle с другой машины в локальной сети.
На другой машине:
— Делаем директорию типа C:\Oracle\Instant
— Копируем туда весь InstantClient, добытый на шаге 6.
— Прописываем в PATH C:\Oracle\Instant
— Прописываем туда же в переменные среды, на всякий случай:
TNS_ADMIN=C:\Oracle\Instant
NLS_LANG=Russian_CIS.CL8MSWIN1251 (если не собираемся на этой машине юзать sqlplus, то пусть русский будет, угу).
— Проходим шаг 8. для этой машины.
— Берем наш скрипт, созданный на шаге 9, меняем в нем «localhost/orcl.168.1.101» на «192.168.1.101/orcl.168.1.101» и запускаем.

Если все ок — то ура! Мы, наконец, одержали победу!

Если же все не ок, то, возможно, причина проблемы с Port Forwarding, если мы его не настроили на шаге 1.

Установка расширений OCI8 и PDO_OCI для PHP5

В настоящее время я работаю в компании, которая очень любит использовать в проектах на PHP СУБД Oracle, причем иногда версии 11g.

Большая часть разработчиков этой компании работает под ОС Windows. За последний месяц несколько из них решили приобщиться к Linux и поставили себе Ubuntu. По прошествии нескольких дней после установки самой ОС, ребята столкнулись с задачей установки драйверов PHP для работы с СУБД Oracle — OCI8 и PDO_OCI на базе Oracle instant client 11.2, которую не смогли решить самостоятельно.

Я не нашел подробного, полностью рабочего мануала на русском, по которому новичок в Linux смог бы выполнить все манипуляции сам. В результате мне пришлось несколько раз проделать серию одних и тех же действий на их машинах и написать мануал, который я вам и представляю.

Мануал написан для пользователей Ubuntu Linux, но с некоторыми изменениями подойдет для пользователей большинства Linux’ов.

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

Установка Oracle instant client

Скачиваем instant client Oracle с официального сайта http://oracle.com для своей архитектуры процессора и ОС.
Для Linux instant client поставляется в двух вариантах:

  • RPM пакет — Linux, CentOS, Fedora, Red Hat Enterprise Linux, Mandriva Linux, SUSE Linux и д.р. у кого есть поддержка RPM;
  • ZIP архив — всем остальным.

Необходимо скачать 2 файла:

  • instantclient-basic — сам Oracle instant client
  • instantclient-sdk — набор библиотек для разработки приложений под Oracle instant client

Также можете скачать:

  • instantclient-sqlplus — SQL*Plus

Создаем директорию, в которой будут лежать файлы Oracle instant client (каталог /opt, зарезервированный для дополнительных пакетов программного обеспечения, хорошо для этого подходит):
sudo mkdir -p /opt/oracle/

Перемещаем скачанные файлы в /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

Заключение

Мануал основан на вот этом посте, который был несколько переработан — исправлены ошибки и внесены дополнения.

Надеюсь, статья будет полезной не только моим коллегам по работе.

Читают сейчас

Похожие публикации

  • 25 апреля 2011 в 17:03

Еще десять тысяч ПК мигрировали на Ubuntu Linux

Установка Ubuntu Linux с винчестера. Скрипт

Неприятная особенность Ubuntu Linux для системных администраторов

Вакансии

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Комментарии 24

Спасибо за подробную инфу.

А под Windows, подскажите:
1) Для разработки стоит ли ставить на свою же машину Standard/Enterprise Edition или она требует много ресурсов и все будет тормозить? (Express не подходит, так как там нет поддержки Java)

2) Под Windows 7 64bit, если сталкивались, то подойдут ли драйвера Oracle 64 bit? А то я ставил и ничего не вышло, PHP не хотел коннектиться, пока не поставил 32 битные.

1. Разнице в потреблении ресурсов между Express и Stadndard/Enterprise Edition нет. В Express просто ограничения на кол-во используемых ресурсов для базы.

2. 32 битные приложения требуют 32 битных драйверов, 64 битные — 64 битных ;-)

1. То есть, S/E Edition позволит мне нормально работать на том же самом компьютере?

2. Уточните ответ, пожалуйста.

2. www.viva64.com/ru/l/0002/ — тут подробнее.
А насчет PHP — в Windows обычно берут бинарные сборки, а в них библиотеки уже собраны под конкретную версию оракловой библиотеки, и с другими версиями оно работать не будет.
Для 64х битной оракловой библиотеки надо 64х битную версию PHP, а их готовых под Windows на официальном сайте я не видел. Ну и до кучи надо будет еще 64 битную версию Apache или другого веб-сервера.

Я пока собирал, наткнулся на множество проблем в компиляции и еще много чего.

В общем я так психовал последний раз когда играл в денди

Да, Сбер хорошо апгрейднулся в лучшую сторону. Но мой пост был не об этом, а о том, что размер компании — это в первую очередь признак пропиаренности среди гос. контор и крупных заказчиков, но никак не признак качественного технического исполнения. Чем крупней заказчик, тем дальше находится человек, принимающий бизнес решения от технарей, которые «как-нибудь этот бампер да прикрутят».

Чем больше узнаю про оракл, тем больше он у меня начинает ассоциироваться с коболом и мэйнфреймами. Сугубо по области своего применения/популярности.

>подойдет для пользователей большинства Linux’ов.

для пользователей RHEL/CentOS на сайте оракла есть готовые RPM
ставите instantclient (http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html) и сам пакет с модулем ( oss.oracle.com/projects/php/ )

The PDO_OCI driver for the PDO extension is not currently included.

If support is needed, use Zend Server.

Немного комментариев с моей стороны (правда, я джавист), т.к. я использую оракл на локальной машине уже довольно давно (около 4 лет).

У нас (под Windows XP x32) используют локальный оракл 10g / 11g Enterprise Edition (standard не подходит из-за отсутствия ряда нужных фич), проблем не наблюдается.

Типично он потребляет памяти где то 250-300 мегабайт (что меньше чем, например, Google Chrome c тремя десятками вкладок:))), при более интенсисной обработке данных — бывает до 500 метров. Нагрузка на процессор обычно вообще не заметна (может проявится только если у вас много сложной логике в хранимых процедурах, и самих данных много).

На машинах класса Core2Duo / Quad с 3-4 гигами памяти локальный оракл совершенно не обременителен. На этих же машинах локально еще работают JBoss, Eclipse (и Google Chrome, который по моему ест памяти больше чем все выше перечисленное вместе взятое).

Типично локальная база занимает мало места сама по себе, т.к. используется локальная база в основном при разработке и локальном тестировании, т.к. данных там обычно немного (в таблицах редко бывает больше чем несколько жалких сот тысяч записей).


Укажу только несколько мелочей, который имеет смысл помнить при работе с локальной базой (когда вы сами себе DBA), они в общем-то общеизвестны, но о них часто забывают. Итак:

— Если вы часто и много (миллионы записей и больше) вставляете и удаляете данных из какой-то таблицы (например, тестируете какие-то интеграционные интерфейсы для загрузки данных из CSV / XML или что-то такое), помните о таком понятии, как Table HWM (high water mark). Переодически не забываете делать не просто delete, а truncate. Кроме того, при очень частой вставке / удалении большого количества записей, следите за размером redo-логов и датафайла с UNDO тейблспейсом.

— Для таблиц, на которые есть активные ссылающиеся внешние ключи из других таблиц, перед тем как можно будет делать truncate, придется пройтись сначала по схеме и отключить все ссылающиеся на таблицу внешние ключи (даже если нет реальных записей, ссылающихся на какие-то данные, сам факт наличия active внешнего ключа не даст сделать truncate).

— Если не следить на местом на диске, то с течением времени оракл может легко отъесть 30-40 гигабайт на диске, даже если у вас нет схем с большим объемом данных. Для борьбы с этим, из простейших методов, не забывайте стирать старые ненужные схемы (т.е. юзеров), и следить за тейблспейсами. Иногда может потребоваться сделать shrink tablespace самому. Неожиданно много места может съедать UNDO tablespace.

Если еще какие то типичные вещи вспомню, напишу.

mysql — не соединяйте базу данных Oracle с PHP через PDO

Я хочу подключить базу данных oracle Schema по умолчанию, которая поставляется в oracle bd через PDO с php, но она выдает мне эту ошибку:

Неустранимая ошибка: необработанное исключение PDO: SQLSTATE [42S02]:
pdo_oci_handle_factory: ORA-12154: TNS: не удалось разрешить соединение
указанный идентификатор (ext \ pdo_oci \ oci_driver.c: 640) в
C: \ xampp \ htdocs \ ORACLE \ 52conexion3.php: 9 Трассировка стека: # 0
C: \ XAMPP \ HTDOCS \ ORACLE \ 52conexion3.php (9):
PDO -> __ construct (‘oci: host = localh …’, ‘hr’, ‘hr’) # 1

, брошенный в
C: \ xampp \ htdocs \ ORACLE \ 52conexion3.php в строке 9

В sql-разработчике в соединении, где находится bd «shema», я щелкнул правой кнопкой мыши, чтобы увидеть свойства, и что введенные данные верны, он говорит имя соединения: Схема — HR, пользователь: час, пароль: час, псевдоним сети: XE .

Другие попытки и до сих пор не работают:

Я проверил INI-файл, и он, по-видимому, прав: «extension = php_pdo_oci.dll».

НОТА: Я искал руководство php и когда я не соединяюсь с pdo, но с помощью процедуры я делаю это таким образом (используя oci_connect), и он работает правильно:

$ connection = oci_connect (‘hr’, ‘hr’, ‘localhost / XE’);

// oci_connect: ресурс oci_connect (строка $ username, строка $ password [, строка $ connection_string [, строка $ character_set [, int $ session_mode]])

Решение

Как указано на Страница руководства по PHP , а также упоминается в комментарии Марио , PDO DSN для OCI использует dbname не schema или же host в своем определении:

localhost/XE формат, который вы используетеEZCONNECT Строка Первая часть определяет хост (localhost), а вторая часть — сервис (XE).

Вы также можете использовать «обычную» строку подключения (как обычно определяется в tnsnames.ora файл) вместо:

Другие решения

в вашей папке php есть файл php.ini, откройте его в блокноте и удалите расширения перед операторами, перед которыми стоит oci, затем снова запустите сервер и затем запустите ваш код.

для подключения нужно добавить:

Если вы используете localhost и настроили TNS, вы можете использовать только псевдоним подключения, в моем случае orcl :

Как подключить базу данных Oracle от PHP

Как подключиться к базе данных Oracle из PHP?

Четвертая ссылка в Google после поиска ваших точных вопросов вызвала следующую ссылку: http://me2learn.wordpress.com/2008/10/18/connect-php-with-oracle-database/

Я предположил, что вы хотите связать php с базами данных oracle. поэтому, я даю вам два файла, это представляет собой базовый php-оракул для вашей справки. удачи!

PHP предоставляет функции Oracle OCI8 . Другими параметрами являются PDO с драйвером Oracle и (если оракул поддерживает его) ODBC .

Я создал соединение самым простым способом следующим образом:

Шаг 1. Загрузите «InstantClient Package – Basic» для Windows со страницы [OTN InstantClient] [1]. Поскольку PHP 32 бит, используйте 32-битную версию InstantClient.

Шаг 2. Разархивируйте файлы InstantClient в C:\instantclient_11_2 и отредактируйте среду Windows PATH, чтобы включить C:\instantclient_11_2 . Например, в Windows XP следуйте «Пуск»> «Панель управления»> «Система»>

Его непонятно из вашего вопроса, если вы хотите настроить свою установку PHP для подключения к oracle или если вы просто хотите, чтобы синтаксис php установил соединение?

Поскольку здесь уже есть конкретный ответ Windows и синтаксис подключения, эти ссылки должны указывать вам в правильном направлении для установки клиентских библиотек Oracle на базе Linux.

  • распаковать библиотеки клиентов Oracle (базовые, SDK и sqlplus)
  • добавьте LD_LIBRARY_PATH в свою среду
  • исправить некоторые символические ссылки для библиотек
  • установите PECL OCI8, это скомпилирует общий объект, чтобы ваша система нуждалась в компиляторе C
  • включите расширение в файле php.ini. Помните, что у вашей системы могут быть отдельные файлы php.ini для CLI и веб-сервера, поэтому проверьте их оба.
  • перезагрузить веб-сервер

Эти шаги находятся на нескольких сообщениях в блоге, поэтому я не буду изобретать колесо здесь. но вот некоторые ссылки, которые выглядят довольно хорошо

Подключение к базе данных Oracle на PHP

Пожалуйста, отключите блокировщик рекламы

По работе пришлось совершить подключение к базе данных Oracle на PHP. С Oracle раньше работать не приходилось, так что засел за долгое и мучительное гугление. Перелопатив англо- и русскоязычные форумы, Stack Overflow и прочие подобные ресурсы, в итоге получилось добиться результата, но путь был пройден не близкий. Так что, может быть, данная статья кому-нибудь пригодится.
Итак, начну с исходных данных, т.к. подключение к БД Oracle на разных системах и разных версиях PHP отличается. Вот что было у меня:

  • Windows 10, 64-bit;
  • OpenServer 5.2.2 (на других локальных серверах не пробовал, но думаю данное решение подойдет для XAMPP, Denwer и если вы развернете свой локальный сервер);
  • PHP 5.3 (на PHP 5.4 данная инструкция не работает);
  • Apaсру 2.2.

А теперь сделаем подключение к базе данных Oracle

  1. Для начала скачиваем Oracle Instance для версии Windows 32-bit (не спрашивайте, почему 32-bit, я не знаю, но именно так это работает). Версии Oracle Instance 11.2 отсюда (на момент написания статьи актуальная версия Version 11.2.0.4.0). Вам нужно будет зарегистрироваться, чтобы скачать, такая уж политика Oracle.
  2. Создаем на диске C папку instantclient_11_2, в которую разархивируем скачанный Oracle Instance.
  3. Создаем папке instantclient_11_2 папку network, а в ней папку admin и создаем в последней файл tnsnames.ora (тут немного инфы об этом файле). Конченый путь к файлу должен быть такой C:\instantclient_11_2\network\admin\tnsnames.ora. Открываем этот файл через редактор и вставляем следующий код:

MYDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ххх.ххх.ххх.ххх)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ХХХ) ) )

где ххх.ххх.ххх.ххх — адрес хоста, к которому нужно подключиться. Порт обычно стандартный 1521. SERVICE_NAME = ХХХ — имя БД, к которой подключаемся. Данный шаг не обязательный, но если в итоге у вас не получиться подключиться к удаленной базе Oracle — выполните его.

  • А теперь самое невероятное. — копиуем содержимое папки instantclient_11_2 и вставляем его в папку с Apache 2.2/bin (мой путь — C:\OpenServer\modules\http\Apache-2.2\bin). Да-да, вы все правильно поняли — этот шаг был самый неочевидный и без него у меня ничего не работало.

  • Идем в “Свойства системы” (правой кнопкой по моему компьютеру — свойства — дополнительные параметры системы — переменные среды ). В разделе «Системные переменные» добавить записи — ORACLE_HOME со значением C:\instantclient_11_2 и PATH со значением C:\instantclient_11_2
  • Далее открываем файл php.ini и ищем следующие строки и раскомментируем их, если они закомментированы (убираем ‘;’ перед ними) и сохраняем:
    Было:

    Вот, собственно и все. Теперь можете пробовать подключаться к БД Oracle. Сделать это можно так:

    Важно! Не забудьте поменять значения ‘username’, ‘password’ и ‘xxx.xxx.xxx.xxx/db_name’ на свои значения.

    Вот такое нетривиальное решение не самой сложной задачи. Возможно, под другие версии PHP решение будет проще, но у меня получилось только такое.

    Если есть вопросы, задавайте, всегда рад буду помочь. И, если вам помогла эта статья — оценивайте, делитесь в соц. сетях и комментируйте, нам будет очень приятно ��

    Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

    Подписывайтесь на наш Telegram канал, чтобы не пропускать наши статьи ��

    Php руководство по рнр 3 0 функции oracle

    2758 просмотра

    3 ответа

    2937 Репутация автора

    Я работаю с PHP-PDO и Oracle 11g. Я работаю с пакетами Oracle, которые имеют много функций и хранимых процедур. Теперь, когда я вызываю одну из функций из IDE sql * plus или sql developer, я запускаю эту команду, чтобы получить набор результатов.

    Он работает нормально и возвращает мой набор результатов. Теперь, когда я делаю то же самое, я получаю ошибки от обработки исключений PDO. Код с конца PHP выглядит так,

    И я получаю исключение, которое регистрируется в моем файле журнала.

    Я неправильно передаю запрос? Или я неправильно связываю параметры?

    Обновить

    Теперь я получил данные, передаваемые в Oracle, и нашел, как передавать нулевые значения. Мой код сейчас

    И теперь, когда я передаю данные, я получаю обратно ошибку

    Я проверяю правильность всех типов, но все равно получаю ту же ошибку. Я даже удалил нулевое значение и передал строку, а также изменил тип pdo на PDO :: PARAM_STR, но он все равно выдает ошибку.

    Ответы (3)

    1 плюс

    193682 Репутация автора

    Функция принимает один или два параметра? В SQL * Plus вы передаете два параметра. В PHP вы передаете только один. Если функция требует двух параметров и нет перегруженного метода, который принимает только один параметр, вы получите эту ошибку.

    1 плюс

    2937 Репутация автора

    Я больше не использую PDO, я буду использовать драйверы OCI. Спасибо за всю помощь.

    SQL — Базы данных RDBMS

    Дата публикации: 2020-11-24

    От автора: существует много популярных RDBMS. В этой статье мы приведем краткий обзор нескольких самых популярных из них. И сравним их основные функции. Итак, какие бывают в SQL RDBMS.

    MySQL

    MySQL — это SQL база данных с открытым исходным кодом, разработанная шведской компанией MySQL AB. MySQL произносится как «май эс-кью-эль», в отличие от SQL — произносится как «секьюэль».

    MySQL поддерживает множество различных платформ, включая Microsoft Windows, основные дистрибутивы Linux, UNIX и Mac OS X.
    Существуют бесплатные и платные версии MySQL, в зависимости от их использования (некоммерческое / коммерческое) и функций. MySQL поставляется с очень быстрым многопоточным многопользовательским и надежным сервером баз данных SQL.

    История

    В 1994 года Микаель Видениус и Дэвид Аксмар начали разрабатывать MySQL.

    Первый внутренний релиз вышел 23 мая 1995 года.

    Как создать сайт самому?

    Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

    Версия под Windows была выпущена 8 января 1998 года для Windows 95 и NT.

    Версия 3.23: бета-версия — июнь 2000 года, рабочий релиз — январь 2001 года.

    Версия 4.0: бета-версия — август 2002 года, рабочий релиз — март 2003 года.

    Версия 4.01: бета-версия — август 2003 года, Jyoti начали применять MySQL для отслеживания базы данных.

    Версия 4.1: бета-версия — июнь 2004 года, рабочий релиз — октябрь 2004 года.

    Версия 5.0: бета-версия — март 2005 года, рабочий релиз — октябрь 2005 года.

    26 февраля 2008 года Sun Microsystems приобрела MySQL AB.

    Версия 5.1: рабочий релиз — 27 ноября 2008 года.

    Особенности

    Масштабируемость и гибкость.

    Качественная поддержка транзакций.


    Надежные хранилища данных.

    Высокая степень защиты данных.

    Комплексная разработка приложений.

    Open Source Freedom и поддержка 24 x 7.

    Самая низкая общая стоимость.

    MS SQL Server

    MS SQL Server — это система управления реляционными базами данных, разработанная Microsoft Inc. Его основными языками запросов являются:

    История

    1987 — Sybase выпускает SQL Server для UNIX.

    1988 — Microsoft, Sybase и Aston-Tate выпускают SQL Server для OS / 2.

    1989 — Microsoft, Sybase и Aston-Tate выпускают SQL Server 1.0 для OS / 2.

    1990 — выпущен SQL Server 1.1 с поддержкой клиентов Windows 3.0.

    Aston-Tate выходит из разработки проекта SQL Server.

    2000 — Microsoft выпускает SQL Server 2000.

    2001 — Microsoft выпускает XML для SQL Server Web Release 1.

    2002 — Microsoft выпускает SQLXML 2.0 (переименован из XML в SQL Server).

    2002 — Microsoft выпускает SQLXML 3.0.

    2005 — 7 ноября 2005 года Microsoft выпускает SQL Server 2005.

    Особенности

    Зеркализирование базы данных

    Снимки базы данных

    Изоляция на уровне строк

    Как создать сайт самому?

    Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

    ORACLE

    Это очень крупная многопользовательская система управления реляционными базами данных, разработанная «Oracle Corporation».
    Oracle предназначена для эффективного управления ресурсами, передачи потоков информации между несколькими клиентами, запрашивающими и передающими данные в сети.

    Это отличный выбор сервера баз данных для клиент-серверных вычислений. Oracle поддерживает все основные операционные системы как для клиентов, так и для серверов, включая MSDOS, NetWare, UnixWare, OS / 2 и большинство UNIX-серверов.

    История

    Oracle была основана в 1977 году и в 2009 году отпразновала 32-летие плодотворной работы на рынке.

    1977 — Ларри Эллисон, Боб Майнер и Эд Оутс основали Software Development Laboratories для проведения работ, связанных с разработкой программного обеспечения.

    1979 — выпущена версия Oracle 2.0, она стала первой коммерческой реляционной базой данных и первой базой данных SQL. Компания изменила свое название на Relational Software Inc. (RSI).

    1981 — RSI начали разработку инструментов для Oracle.

    1982 — RSI была переименована в Oracle Corporation.

    1983 — Oracle выпустила версию 3.0, переписанную на языке C и работающую на нескольких платформах.

    1984 — выпущена версия Oracle 4.0. Она поддерживала такие функции, как контроль параллелизма — согласованность нескольких версий и т. д.

    2007 — Oracle выпустила Oracle11g. В новой версии были реализованы улучшения разделения, простая миграция и т. д.

    Особенности

    База данных Quiesce

    Само-управляемые базы данных

    MS ACCESS

    Это один из самых популярных продуктов Microsoft. Microsoft Access — это программное обеспечение для управления базами данных начального уровня. База данных MS Access — это недорогая, но в то же время мощная система для небольших проектов.

    MS Access использует механизм базы данных Jet, который применяет определенный диалект языка SQL (иногда называемый Jet SQL). MS Access поставляется в профессиональной версии пакета MS Office. MS Access имеет простой в использовании интуитивно понятный графический интерфейс.

    1992 — выпущена версия Access 1.0.

    1993 — выпущен Access 1.1 для улучшения совместимости с включением языка программирования Access Basic.

    Наиболее значительным был переход от Access 97 к Access 2000.

    2007 — в Access 2007 был введен новый формат базы данных ACCDB, который поддерживает сложные типы данных, такие как многозначные и вложенные поля.

    Особенности

    Пользователи могут создавать таблицы, запросы, формы и отчеты и связывать их вместе с помощью макросов.

    Возможность импорта и экспорта данных во многие форматы, включая Excel, Outlook, ASCII, dBase, Paradox, FoxPro, SQL Server, Oracle, ODBC и т. д.

    Существует также формат базы данных Jet (MDB или ACCDB в Access 2007), который позволяет содержать приложение и данные в одном файле. Это делает очень удобным предоставление всего приложения другому пользователю, который может запускать его в отключенных средах.

    Microsoft Access предлагает параметризованные запросы. В этих запросах и таблицах Access можно ссылаться на другие программы, такие как VB6 и .NET через DAO или ADO.

    Стационарные версии Microsoft SQL Server могут использоваться с Access как альтернатива Jet Database Engine.

    Microsoft Access — это база данных на базе файлового сервера. В отличие от систем управления реляционными базами данных клиент-сервер (РСУБД), Microsoft Access не реализует триггеры базы данных, хранимые процедуры или ведение журнала транзакций.

    Редакция: Команда webformyself.

    Как создать сайт самому?

    Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

  • Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL