1. Главная страница » Компьютеры » Php подключение к oracle

Php подключение к oracle

Автор: | 16.12.2019

(PHP 5, PHP 7, PECL OCI8 >= 1.1.0)

oci_connect — Устанавливает соединение с базой данных Oracle

Описание

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

См. Управление соединением для более детальной информации по управлению соединениями.

Начиная с PHP 5.1.2 (PECL OCI8 1.1) функция oci_close() может использоваться для завершения соединения.

Второй и последующие вызовы функции oci_connect() с теми же параметрами вернут идентификатор уже открытого соединения. Это означает, что транзакции используют одно и то же базовое соединение с базой данных. При необходимости разделения транзакций рекомендуется использовать функцию oci_new_connect() .

Список параметров

Имя пользователя Oracle.

Содержит экземпляр Oracle для подключения. Это может быть » Easy Connect string, или Connect Name из файла tnsnames.ora , или имя локального экземпляра Oracle.

Если не указано отдельно, PHP использует переменные окружения, такие как TWO_TASK (на Linux) или LOCAL (на Windows) и ORACLE_SID для определения экземпляра Oracle для соединения.

Для использования метода Easy Connect, PHP должен быть слинкован с клиентскими библиотеками версии Oracle 10 g или старше. Easy Connect string для Oracle 10 g принимает следующую форму: [//]host_name[:port][/service_name]. Начиная с Oracle 11 g синтаксис таков: [//]host_name[:port][/service_name][:server_type][/instance_name]. Названия служб могут быть определены с помощью запуска Oracle утилиты lsnrctl status на сервере базы данных.

Файл tnsnames.ora может находиться в поисковом пути Oracle Net, который включает $ORACLE_HOME/network/admin и /etc . В качестве альтернативного варианта можно установить TNS_ADMIN таким образом, чтобы путь $TNS_ADMIN/tnsnames.ora был читаемым. Убедитесь, что веб-сервер имеет доступ к этому файлу.

Определяет кодировку, используемую клиентскими библиотеками Oracle. Данная кодировка не обязательно должна совпадать с кодировкой, используемой в самой базе данных. Если она не совпадает, Oracle сделает все возможное для конвертирования данных из- и в данную кодировку. В зависимости от используемых кодировок это может не всегда давать приемлемые результаты. Преобразование также создает некоторые дополнительные временные затраты.

Если кодировка не указана, клиентские библиотеки Oracle будут определять ее из переменной окружения NLS_LANG .

Передача этого параметра может уменьшить время затрачиваемое на соединение.

Этот параметр доступен начиная с версии PHP 5 (PECL OCI8 1.1) и принимает следующие значения: OCI_DEFAULT , OCI_SYSOPER и OCI_SYSDBA . Если были указаны OCI_SYSOPER или OCI_SYSDBA , данная функция попытается установить привилегированное соединение, используя внешние данные авторизации. По умолчанию привилегированные соединения отключены. Чтобы их включить, необходимо установить oci8.privileged_connect в On.

В версии PHP 5.3 (PECL OCI8 1.3.4) появилось значение OCI_CRED_EXT . Оно указывает Oracle использовать внешнюю аутентификацию или аутентификацию с помощью операционной системы, что должно быть настроено в базе данных. Флаг OCI_CRED_EXT может быть использован только с именем пользователя "/" и пустым паролем. oci8.privileged_connect может принимать значение On или Off.

OCI_CRED_EXT может использоваться совместно с режимами OCI_SYSOPER и OCI_SYSDBA .

OCI_CRED_EXT не поддерживается в Windows по причинам безопасности.

Возвращаемые значения

Возвращает идентификатор соединения или FALSE в случае ошибки.

Примеры

Пример #1 Пример использования oci_connect() с синтаксисом Easy Connect

// Подключается к XE сервису (т.е. к базе данных) на "localhost"
$conn = oci_connect ( ‘hr’ , ‘welcome’ , ‘localhost/XE’ );
if (! $conn ) <
$e = oci_error ();
trigger_error ( htmlentities ( $e [ ‘message’ ], ENT_QUOTES ), E_USER_ERROR );
>

$stid = oci_parse ( $conn , ‘SELECT * FROM employees’ );
oci_execute ( $stid );

echo "

" ;
while ( $row = oci_fetch_array ( $stid , OCI_ASSOC + OCI_RETURN_NULLS )) <
echo "

" ;
foreach ( $row as $item ) <
echo "

" ;
>
echo "

" ;
>
echo "

" . ( $item !== null ? htmlentities ( $item , ENT_QUOTES ) : "" ) . "

" ;

Пример #2 Пример использования oci_connect() используя имя Network Connect

// Соединяется с базой данных MYDB описанной в файле tnsnames.ora,
// Пример записи в tnsnames.ora для MYDB:
// MYDB =
// (DESCRIPTION =
// (ADDRESS = (PROTOCOL = TCP)(HOST = mymachine.oracle.com)(PORT = 1521))
// (CONNECT_DATA =
// (SERVER = DEDICATED)
// (SERVICE_NAME = XE)
// )
// )

$conn = oci_connect ( ‘hr’ , ‘welcome’ , ‘MYDB’ );
if (! $conn ) <
$e = oci_error ();
trigger_error ( htmlentities ( $e [ ‘message’ ], ENT_QUOTES ), E_USER_ERROR );
>

$stid = oci_parse ( $conn , ‘SELECT * FROM employees’ );
oci_execute ( $stid );

echo "

" ;
while ( $row = oci_fetch_array ( $stid , OCI_ASSOC + OCI_RETURN_NULLS )) <
echo "

" ;
foreach ( $row as $item ) <
echo "

" ;
>
echo "

" ;
>
echo "

" . ( $item !== null ? htmlentities ( $item , ENT_QUOTES ) : "" ) . "

" ;

Пример #3 Пример использования oci_connect() с использованием определенного набора символов

= oci_connect ( ‘hr’ , ‘welcome’ , ‘localhost/XE’ , ‘AL32UTF8’ );
if (! $conn ) <
$e = oci_error ();
trigger_error ( htmlentities ( $e [ ‘message’ ], ENT_QUOTES ), E_USER_ERROR );
>

$stid = oci_parse ( $conn , ‘SELECT * FROM employees’ );
oci_execute ( $stid );

echo "

" ;
while ( $row = oci_fetch_array ( $stid , OCI_ASSOC + OCI_RETURN_NULLS )) <
echo "

" ;
foreach ( $row as $item ) <
echo "

" ;
>
echo "

" ;
>
echo "

" . ( $item !== null ? htmlentities ( $item , ENT_QUOTES ) : "" ) . "

" ;

Пример #4 Пример использования многократных вызовов oci_connect()

= oci_connect ( "hr" , "welcome" , ‘localhost/XE’ );
$c2 = oci_connect ( "hr" , "welcome" , ‘localhost/XE’ );

// $c1 и $c2 содержат одинаковый PHP id ресурса, что означает, что
// они используют одинаковое базовое соединение
echo "c1 is $c1
" ;
echo "c2 is $c2
" ;

function create_table ( $conn )
<
$stmt = oci_parse ( $conn , "create table hallo (test varchar2(64))" );
oci_execute ( $stmt );
echo "Created table
" ;
>

function drop_table ( $conn )
<
$stmt = oci_parse ( $conn , "drop table hallo" );
oci_execute ( $stmt );
echo "Dropped table
" ;
>

function insert_data ( $connname , $conn )
<
$stmt = oci_parse ( $conn , "insert into hallo
values(to_char(sysdate,’DD-MON-YY HH24:MI:SS’))" );
oci_execute ( $stmt , OCI_DEFAULT );
echo " $connname inserted row without committing
" ;
>

function rollback ( $connname , $conn )
<
oci_rollback ( $conn );
echo " $connname rollback
" ;
>

function select_data ( $connname , $conn )
<
$stmt = oci_parse ( $conn , "select * from hallo" );
oci_execute ( $stmt , OCI_DEFAULT );
echo " $connname —-selecting
" ;
while ( oci_fetch ( $stmt )) <
echo " " . oci_result ( $stmt , "TEST" ) . "
" ;
>
echo " $connname —-done
" ;
>

insert_data ( ‘c1’ , $c1 ); // Вставить строку используя c1
sleep ( 2 ); // остановиться для записи другой временной метки для следующей строки
insert_data ( ‘c2’ , $c2 ); // Вставить строку используя c2

select_data ( ‘c1’ , $c1 ); // Возврат результата обоих вставок
select_data ( ‘c2’ , $c2 ); // Возврат результата обоих вставок

rollback ( ‘c1’ , $c1 ); // Откат используя c1

select_data ( ‘c1’ , $c1 ); // Откат был произведен для обоих вставок
select_data ( ‘c2’ , $c2 );

// Закрытие одного из соединений делает переменную PHP недоступной, но
// другие могут быть использованы
oci_close ( $c1 );
echo "c1 is $c1
" ;
echo "c2 is $c2
" ;

// Вывод is:
// c1 is Resource id #5
// c2 is Resource id #5
// Created table
// c1 inserted row without committing
// c2 inserted row without committing
// c1 —-selecting
// 09-DEC-09 12:14:43
// 09-DEC-09 12:14:45
// c1 —-done
// c2 —-selecting
// 09-DEC-09 12:14:43
// 09-DEC-09 12:14:45
// c2 —-done
// c1 rollback
// c1 —-selecting
// c1 —-done
// c2 —-selecting
// c2 —-done
// Dropped table
// c1 is
// c2 is Resource id #5

Примечания

Некорректно установленное или настроенное расширение OCI8 будет часто сообщать о проблемах соединения или ошибках. См. Установка/Настройка для решения проблем.

Смотрите также

  • oci_pconnect() — Устанавливает постоянное соединение с сервером Oracle
  • oci_new_connect() — Устанавливает новое соединение с сервером Oracle
  • oci_close() — Закрывает соединение с сервером Oracle

Автор: Frank Naude
Перевод: Александр Войцеховский

Обсуждаемые вопросы:

Что такое PHP и что необходимо иметь для работы с Oracle?

PHP — рекурсивный акроним "PHP Hypertext Preprocessor". Это интерпретируемый язык программирования с открытым исходным кодом. Он предназначен для генерации веб-документов на сервере.

Этот документ описывает, как PHP взаимодействует с базой данных Oracle. Подразумевается, что у Вас уже установлен и настроен PHP. Проверить его работоспособность можно следующим скриптом:

If PHP is working, you will see "Hello World" below:
echo "Hello world" ;
phpinfo (); // Print PHP version and config info
?>

Попробуйте выполнить этот код из командной строки либо откройте тестовую страницу в Вашем браузере. Если приведенный выше пример не работает, отложите этот документ и добейтесь корректной работы PHP.

В чем разница между модулями OCI и ORA?

В дистрибутив PHP входят два модуля, предназначенных для работы с PHP:

  • Стандартные Oracle-функции (ORA)
  • Интерфейс для доступа к функциям Oracle (OCI)

Если есть возможность выбора, предпочтение стоит отдать модулю OCI, так как он более оптимизирован и имеет большую функциональность. К примеру, модуль ORA не поддерживает CLOB, BLOB, BFILE, ROWID.

Как собрать PHP с поддержкой Oracle?

Для того, что бы получить работоспособную связку PHP & Oracle, необходимо выполнить следующие шаги:

  • Скачать дистрибутив PHP с официального сайта www.php.net, установить его на сервер и убедиться в его работоспособности
  • Установить клиент Oracle на Ваш сервер и настроить подключение к Вашей базе данных
  • Если у Вас Windows-сервер, раскомментируйте следующие строки в файле php.ini:
  • Также убедитесь в том, чтобы extension_dir указывала на директорию, содержащую указанные модули.

    Если у Вас Linux-сервер, пересоберите PHP с одной из опций:

  • Напишите небольшой тестовый скрипт, чтобы убедится в том, что установка завершилась успешно. В качестве тестового скрипта можно взять пример из следующего вопроса.
  • Как подключится к базе данных?

    Если вы используете модуль OCI, воспользуйтесь следующим кодом:

    if ( $c = OCILogon ( "scott" , "tiger" , "orcl" )) <
    echo "Successfully connected to Oracle.
    " ;
    OCILogoff ( $c );
    > else <
    $err = OCIError ();
    echo "Oracle Connect Error " . $err [ text ];
    >
    ?>

    Если вы используете модуль ORA, попробуйте следующее:

    if ( $c = ora_logon ( "scott@orcl" , "tiger" )) <
    echo "Successfully connected to Oracle.
    " ;
    ora_commitoff ( $c );
    ora_logoff ( $c );
    > else <
    echo "Oracle Connect Error " . ora_error ();
    >
    ?>

    Замечание: если у Вас не установлены необходимые переменные окружения, поместите следующие строки в начале каждого скрипта, работающего с Oracle:

    ( "ORACLE_S > );
    PutEnv ( "ORACLE_HOME=/app/oracle/product/9.2.0" );
    PutEnv ( "TNS_ADMIN=/var/opt/oracle" );

    В случае, если Вы несколько раз в пределах одного скрипта попробуете подключится к базе данных, используя одинаковую комбинацию логин/пароль, Вы получите одно и то же соединение. Если Вам необходимы различные подключения к базе, используйте функцию OCINLogon(). Если вам нужны постоянные соединения, используйте функцию OCIPLogon().

    Почему возникает ошибка "Call to undefined function: ora_logon()/ ocilogon()"?

    Вероятнее всего, у Вас не включена поддержка Oracle. Вернитесь к вопросу "Как собрать PHP с поддержкой Oracle?". Вам необходимо пересобрать php, если у Вас Linux или раскомментировать загрузку соответствующей библиотеки, если у вас Windows.

    Как выполнять запросы SELECT, INSERT, UPDATE и DELETE посредством PHP?

    Приведенный ниже исходный код демонстрирует, как удалять/создавать новые таблицы, записывать/извлекать из них данные в PHP.

    = OCILogon ( "scott" , "tiger" , "orcl" );
    if ( ! $c ) <
    echo "Невозможно подключится к базе: " . var_dump ( OCIError () );
    die();
    >

    // Удаляем старую табоицу
    $s = OCIParse ( $c , "drop table tab1" );
    OCIExecute ( $s , OCI_DEFAULT );

    // Создаем новую таблицу
    $s = OCIParse ( $c , "create table tab1 (col1 number, col2 varchar2(30))" );
    OCIExecute ( $s , OCI_DEFAULT );

    // Заносим строку в только что созданную таблицу
    $s = OCIParse ( $c , "insert into tab1 values (1, ‘Frank’)" );
    OCIExecute ( $s , OCI_DEFAULT );

    // Заносим данные в таблицу используя конструкцию "bind"
    $var1 = 2 ;
    $var2 = "Scott" ;
    $s = OCIParse ( $c , "insert into tab1 values (:bind1, :bind2)" );
    OCIBindByName ( $s , ":bind1" , $var1 );
    OCIBindByName ( $s , ":bind2" , $var2 );
    OCIExecute ( $s , OCI_DEFAULT );

    // Производим выборку из базы данных
    $s = OCIParse ( $c , "select * from tab1" );
    OCIExecute ( $s , OCI_DEFAULT );
    while ( OCIFetch ( $s )) <
    echo "COL1=" . ociresult ( $s , "COL1" ) .
    ", COL2=" . ociresult ( $s , "COL2" ) . "
    " ;
    >

    // Выполняем commit;
    OCICommit ( $c );

    // Отключаемся от базы данных
    OCILogoff ( $c );
    ?>

    Как получить доступ к механизму транзакций из PHP?

    При использовании модуля OCI каждый раз после удачного выполнения ociexecute() автоматически происходит commit, и, таким образом, транзакция сразу же завершается. Вы можете управлять этим процессом, указывая дополнительный параметр OCI_COMMIT_ON_SUCCESS либо OCI_DEFAULT при вызове функции ociexecute(). В случае использования OCI_DEFAULT вы сможете полностью управлять механизмом транзакций, для этого используйте функции OCICommit() и OCIRollback().

    Следует учесть, что использование OCI_DEFAULT в одном из вызовов ociexecute() автоматически наследуется для всего подключения к базе данных и будет использовано при дальнейших операциях с базой данных. Если вы не хотите использовать автоматический и ручной механизм управления транзакциями одновременно, используйте OCINLogon().

    В случае, если Вы используете модуль ORA, управление транзакциями выглядит немного иначе. Используйте функции ORA_CommitOn() и ORA_CommitOff() для переключения между ручным и автоматическим механизмом управления транзакциями. Для завершения транзакции и отката используйте функции ORA_Commit() и ORA_Rollback() соответственно.

    В случае, если после завершения работы скрипта ни разу не выполнялся ни commit, ни rollback, PHP завершит транзакцию командой commit.

    Как корректно обрабатывать возникающие ошибки?

    В случае, если вы используете модуль OCI, используйте функцию OCIError() для получения массива, содержащего детальную информацию о возникающих ошибках. Если подключений несколько, OCIError() позволяет получить информацию об ошибке в каждом их них индивидуально. Если данная функция вызывается без параметров, она возвращает массив с информацией о последней произошедшей ошибке.

    = OCIError ();
    var_dump ( $err );

    print "
    Error code = " . $err [ code ];
    print "
    Error message = " . $err [ message ];
    print "
    Error position = " . $err [ offset ];
    print "
    SQL Statement = " . $err [ sqltext ];
    ?>

    В случае, если вы используете модуль ORA, воспользуйтесь функциями ora_error() и errorcode() для получения информации о последней произошедшей ошибке.

    print "
    Error code = " . ora_errorcode ();
    print "
    Error message = " . ora_error ();
    ?>

    Как вызвать из PHP хранимую процедуру?

    Приведенный ниже пример демонстрирует создание и вызов хранимой процедуры.

    // Подключаемся к базе данных
    $c = OCILogon ( "scott" , "tiger" , "orcl" );
    if ( ! $c ) <
    echo "Unable to connect: " . var_dump ( OCIError () );
    die();
    >

    // Создаем хранимую процедуру
    $s = OCIParse ( $c , "create procedure proc1(p1 IN number, p2 OUT number) as " .
    "begin" .
    " p2 := p1 + 10;" .
    "end;" );
    OCIExecute ( $s , OCI_DEFAULT );

    // Вызываем процедуру
    $in_var = 10 ;
    $s = OCIParse ( $c , "begin proc1(:bind1, :bind2); end;" );
    OCIBindByName ( $s , ":bind1" , $in_var );
    OCIBindByName ( $s , ":bind2" , $out_var , 32 ); // 32 is the return length
    OCIExecute ( $s , OCI_DEFAULT );
    echo "Procedure returned value: " . $out_var ;

    // Отключаемся от базы данных
    OCILogoff ( $c );
    ?>

    Где можно найти больше информации о работе с Oracle в PHP?

    Для получения более детальной информации посетите следующие сайты:

    (PHP 5, PHP 7, PECL OCI8 >= 1.1.0)

    oci_connect — Устанавливает соединение с базой данных Oracle

    Описание

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

    См. Управление соединением для более детальной информации по управлению соединениями.

    Начиная с PHP 5.1.2 (PECL OCI8 1.1) функция oci_close() может использоваться для завершения соединения.

    Второй и последующие вызовы функции oci_connect() с теми же параметрами вернут идентификатор уже открытого соединения. Это означает, что транзакции используют одно и то же базовое соединение с базой данных. При необходимости разделения транзакций рекомендуется использовать функцию oci_new_connect() .

    Список параметров

    Имя пользователя Oracle.

    Содержит экземпляр Oracle для подключения. Это может быть » Easy Connect string, или Connect Name из файла tnsnames.ora , или имя локального экземпляра Oracle.

    Если не указано отдельно, PHP использует переменные окружения, такие как TWO_TASK (на Linux) или LOCAL (на Windows) и ORACLE_SID для определения экземпляра Oracle для соединения.

    Для использования метода Easy Connect, PHP должен быть слинкован с клиентскими библиотеками версии Oracle 10 g или старше. Easy Connect string для Oracle 10 g принимает следующую форму: [//]host_name[:port][/service_name]. Начиная с Oracle 11 g синтаксис таков: [//]host_name[:port][/service_name][:server_type][/instance_name]. Названия служб могут быть определены с помощью запуска Oracle утилиты lsnrctl status на сервере базы данных.

    Файл tnsnames.ora может находиться в поисковом пути Oracle Net, который включает $ORACLE_HOME/network/admin и /etc . В качестве альтернативного варианта можно установить TNS_ADMIN таким образом, чтобы путь $TNS_ADMIN/tnsnames.ora был читаемым. Убедитесь, что веб-сервер имеет доступ к этому файлу.

    Определяет кодировку, используемую клиентскими библиотеками Oracle. Данная кодировка не обязательно должна совпадать с кодировкой, используемой в самой базе данных. Если она не совпадает, Oracle сделает все возможное для конвертирования данных из- и в данную кодировку. В зависимости от используемых кодировок это может не всегда давать приемлемые результаты. Преобразование также создает некоторые дополнительные временные затраты.

    Если кодировка не указана, клиентские библиотеки Oracle будут определять ее из переменной окружения NLS_LANG .

    Передача этого параметра может уменьшить время затрачиваемое на соединение.

    Этот параметр доступен начиная с версии PHP 5 (PECL OCI8 1.1) и принимает следующие значения: OCI_DEFAULT , OCI_SYSOPER и OCI_SYSDBA . Если были указаны OCI_SYSOPER или OCI_SYSDBA , данная функция попытается установить привилегированное соединение, используя внешние данные авторизации. По умолчанию привилегированные соединения отключены. Чтобы их включить, необходимо установить oci8.privileged_connect в On.

    В версии PHP 5.3 (PECL OCI8 1.3.4) появилось значение OCI_CRED_EXT . Оно указывает Oracle использовать внешнюю аутентификацию или аутентификацию с помощью операционной системы, что должно быть настроено в базе данных. Флаг OCI_CRED_EXT может быть использован только с именем пользователя "/" и пустым паролем. oci8.privileged_connect может принимать значение On или Off.

    OCI_CRED_EXT может использоваться совместно с режимами OCI_SYSOPER и OCI_SYSDBA .

    OCI_CRED_EXT не поддерживается в Windows по причинам безопасности.

    Возвращаемые значения

    Возвращает идентификатор соединения или FALSE в случае ошибки.

    Примеры

    Пример #1 Пример использования oci_connect() с синтаксисом Easy Connect

    // Подключается к XE сервису (т.е. к базе данных) на "localhost"
    $conn = oci_connect ( ‘hr’ , ‘welcome’ , ‘localhost/XE’ );
    if (! $conn ) <
    $e = oci_error ();
    trigger_error ( htmlentities ( $e [ ‘message’ ], ENT_QUOTES ), E_USER_ERROR );
    >

    $stid = oci_parse ( $conn , ‘SELECT * FROM employees’ );
    oci_execute ( $stid );

    echo "

    " ;
    while ( $row = oci_fetch_array ( $stid , OCI_ASSOC + OCI_RETURN_NULLS )) <
    echo "

    " ;
    foreach ( $row as $item ) <
    echo "

    " ;
    >
    echo "

    " ;
    >
    echo "

    " . ( $item !== null ? htmlentities ( $item , ENT_QUOTES ) : "" ) . "

    " ;

    Пример #2 Пример использования oci_connect() используя имя Network Connect

    // Соединяется с базой данных MYDB описанной в файле tnsnames.ora,
    // Пример записи в tnsnames.ora для MYDB:
    // MYDB =
    // (DESCRIPTION =
    // (ADDRESS = (PROTOCOL = TCP)(HOST = mymachine.oracle.com)(PORT = 1521))
    // (CONNECT_DATA =
    // (SERVER = DEDICATED)
    // (SERVICE_NAME = XE)
    // )
    // )

    $conn = oci_connect ( ‘hr’ , ‘welcome’ , ‘MYDB’ );
    if (! $conn ) <
    $e = oci_error ();
    trigger_error ( htmlentities ( $e [ ‘message’ ], ENT_QUOTES ), E_USER_ERROR );
    >

    $stid = oci_parse ( $conn , ‘SELECT * FROM employees’ );
    oci_execute ( $stid );

    echo "

    " ;
    while ( $row = oci_fetch_array ( $stid , OCI_ASSOC + OCI_RETURN_NULLS )) <
    echo "

    " ;
    foreach ( $row as $item ) <
    echo "

    " ;
    >
    echo "

    " ;
    >
    echo "

    " . ( $item !== null ? htmlentities ( $item , ENT_QUOTES ) : "" ) . "

    " ;

    Пример #3 Пример использования oci_connect() с использованием определенного набора символов

    = oci_connect ( ‘hr’ , ‘welcome’ , ‘localhost/XE’ , ‘AL32UTF8’ );
    if (! $conn ) <
    $e = oci_error ();
    trigger_error ( htmlentities ( $e [ ‘message’ ], ENT_QUOTES ), E_USER_ERROR );
    >

    $stid = oci_parse ( $conn , ‘SELECT * FROM employees’ );
    oci_execute ( $stid );

    echo "

    " ;
    while ( $row = oci_fetch_array ( $stid , OCI_ASSOC + OCI_RETURN_NULLS )) <
    echo "

    " ;
    foreach ( $row as $item ) <
    echo "

    " ;
    >
    echo "

    " ;
    >
    echo "

    " . ( $item !== null ? htmlentities ( $item , ENT_QUOTES ) : "" ) . "

    " ;

    Пример #4 Пример использования многократных вызовов oci_connect()

    = oci_connect ( "hr" , "welcome" , ‘localhost/XE’ );
    $c2 = oci_connect ( "hr" , "welcome" , ‘localhost/XE’ );

    // $c1 и $c2 содержат одинаковый PHP id ресурса, что означает, что
    // они используют одинаковое базовое соединение
    echo "c1 is $c1
    " ;
    echo "c2 is $c2
    " ;

    function create_table ( $conn )
    <
    $stmt = oci_parse ( $conn , "create table hallo (test varchar2(64))" );
    oci_execute ( $stmt );
    echo "Created table
    " ;
    >

    function drop_table ( $conn )
    <
    $stmt = oci_parse ( $conn , "drop table hallo" );
    oci_execute ( $stmt );
    echo "Dropped table
    " ;
    >

    function insert_data ( $connname , $conn )
    <
    $stmt = oci_parse ( $conn , "insert into hallo
    values(to_char(sysdate,’DD-MON-YY HH24:MI:SS’))" );
    oci_execute ( $stmt , OCI_DEFAULT );
    echo " $connname inserted row without committing
    " ;
    >

    function rollback ( $connname , $conn )
    <
    oci_rollback ( $conn );
    echo " $connname rollback
    " ;
    >

    function select_data ( $connname , $conn )
    <
    $stmt = oci_parse ( $conn , "select * from hallo" );
    oci_execute ( $stmt , OCI_DEFAULT );
    echo " $connname —-selecting
    " ;
    while ( oci_fetch ( $stmt )) <
    echo " " . oci_result ( $stmt , "TEST" ) . "
    " ;
    >
    echo " $connname —-done
    " ;
    >

    insert_data ( ‘c1’ , $c1 ); // Вставить строку используя c1
    sleep ( 2 ); // остановиться для записи другой временной метки для следующей строки
    insert_data ( ‘c2’ , $c2 ); // Вставить строку используя c2

    select_data ( ‘c1’ , $c1 ); // Возврат результата обоих вставок
    select_data ( ‘c2’ , $c2 ); // Возврат результата обоих вставок

    rollback ( ‘c1’ , $c1 ); // Откат используя c1

    select_data ( ‘c1’ , $c1 ); // Откат был произведен для обоих вставок
    select_data ( ‘c2’ , $c2 );

    // Закрытие одного из соединений делает переменную PHP недоступной, но
    // другие могут быть использованы
    oci_close ( $c1 );
    echo "c1 is $c1
    " ;
    echo "c2 is $c2
    " ;

    // Вывод is:
    // c1 is Resource id #5
    // c2 is Resource id #5
    // Created table
    // c1 inserted row without committing
    // c2 inserted row without committing
    // c1 —-selecting
    // 09-DEC-09 12:14:43
    // 09-DEC-09 12:14:45
    // c1 —-done
    // c2 —-selecting
    // 09-DEC-09 12:14:43
    // 09-DEC-09 12:14:45
    // c2 —-done
    // c1 rollback
    // c1 —-selecting
    // c1 —-done
    // c2 —-selecting
    // c2 —-done
    // Dropped table
    // c1 is
    // c2 is Resource id #5

    Примечания

    Некорректно установленное или настроенное расширение OCI8 будет часто сообщать о проблемах соединения или ошибках. См. Установка/Настройка для решения проблем.

    Смотрите также

    • oci_pconnect() — Устанавливает постоянное соединение с сервером Oracle
    • oci_new_connect() — Устанавливает новое соединение с сервером Oracle
    • oci_close() — Закрывает соединение с сервером Oracle
    Читайте также:  Filerepository что это за папка

    Добавить комментарий

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

    *

    code