Эти функции позволяют вам работать с Oracle версий 10/9/8/7. Для этого используется библиотека Oracle Call Interface (OCI).
Данный модуль много гибче прежнего. Он содержит функции привязки переменных PHP к соответствующим меткам Oracle, расширенную поддержка LOB, FILE и ROWID. Использование этого модуля рекомендуется вместо старого модуля.
Вам понадобятся клиентские библиотеки Oracle для того, чтобы использовать этот модуль. Пользователям Windows будут необходимы библиотеки минимум версии 10 для того, чтобы использовать php_oci8.dll.
Мы рекомендуем вам использовать Oracle Instant Client, доступный по адресу » http://www.oracle.com/technology/tech/oci/instantclient/instantclient.html. Для использования модуля OCI8 достаточно установить "basic" версию пакета Oracle Instant Client. Instant Client не требует установки переменных ORACLE_SID или ORACLE_HOME. Однако, вам возможно понадобится установить переменные окружения LD_LIBRARY_PATH и NLS_LANG.
Перед использованием этого модуля, проверьте, что вы установили все необходимые переменные окружения. Эти переменные, перечисленные ниже, должны быть доступны пользователю Oracle и пользователю, с правами которого работает веб-сервер. Переменные окружения, необходимые для корректной работы с Oracle:
После установки среды окружения для веб-сервера, добавьте пользователя, с правами которого работает веб-сервер, в группу oracle.
Note: Если ваш веб-сервер не стартует или возвращает ошибку при старте Проверьте, что Apache был слинкован с библиотекой pthread:
# ldd /www/apache/bin/httpd libpthread.so.0 => /lib/libpthread.so.0 (0x4001c000) libm.so.6 => /lib/libm.so.6 (0x4002f000) libcrypt.so.1 => /lib/libcrypt.so.1 (0x4004c000) libdl.so.2 => /lib/libdl.so.2 (0x4007a000) libc.so.6 => /lib/libc.so.6 (0x4007e000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Если libpthread не присутствует в списке, то вам придется переустановить Apache:
# cd /usr/src/apache_1.3.xx # make clean # LIBS=-lpthread ./config.status # make # make install
Обратите внимание на то, что на некоторых системах, например, UnixWare, вместо libthread присутствует libpthread. PHP и Apache также должны быть собраны с EXTRA_LIBS=-lthread.
PHP должен быть сконфигурирован с опцией --with-oci8[=DIR], где DIR соответствует директории, в которой находится установленный ранее сервер и/или клиент Oracle. По умолчанию значение DIR соответствует переменной окружения ORACLE_HOME.
Если вы используете Oracle Instant Client, то для поддержки модуля OCI8 нужно, чтобы PHP был сконфигурирован с опцией --with-oci8-instant-client[=DIR]. Обратите внимание: поддержка Oracle Instant Client появилась только начиная с версий 4.3.11 и 5.0.4.
Данное расширение не определяет никакие директивы конфигурации в php.ini.
Перечисленные ниже константы определены данным расширением и могут быть доступны только в том случае, если PHP был собран с поддержкой этого расширения или же в том случае, если данное расширение подгружается во время выполнения.
Example#1 Примеры использования
<?php
// by sergo at bacup dot ru
// Use option: OCI_DEFAULT for execute command to delay execution
OCIExecute($stmt, OCI_DEFAULT);
// for retrieve data use (after fetch):
$result = OCIResult($stmt, $n);
if (is_object($result)) $result = $result->load();
// For INSERT or UPDATE statement use:
$sql = "insert into table (field1, field2) values (field1 = 'value',
field2 = empty_clob()) returning field2 into :field2";
OCIParse($conn, $sql);
$clob = OCINewDescriptor($conn, OCI_D_LOB);
OCIBindByName($stmt, ":field2", &$clob, -1, OCI_B_CLOB);
OCIExecute($stmt, OCI_DEFAULT);
$clob->save("some text");
OCICommit($conn);
?>
Вы можете использовать хранимые процедуры так же, как это делается из командной строки.
Example#2 Использование хранимых процедур
<?php
// by webmaster at remoterealty dot com
$sth = OCIParse($dbh, "begin sp_newaddress( :address_id, '$firstname',
'$lastname', '$company', '$address1', '$address2', '$city', '$state',
'$postalcode', '$country', :error_code );end;");
// This calls stored procedure sp_newaddress, with :address_id being an
// in/out variable and :error_code being an out variable.
// Then you do the binding:
OCIBindByName($sth, ":address_id", $addr_id, 10);
OCIBindByName($sth, ":error_code", $errorcode, 10);
OCIExecute($sth);
?>