Обращение с помощью PHP к данным в Oracle может осуществляться через CGI или через специальные функции. Первая возможность рискована с точки зрения безопасности и здесь не рассматривается.
Вторая, в свою очередь, реализуется двумя имеющимися библиотеками: php_oracle и php_oci8, из которых вторая считается более эффективной. Продемонстрировать ту и другую можно на примере файла employees.php:
<html>
<head><title>Access to Oracle from php</title></head>
<body>
<h3>The two types of Access to Oracle from php:</h3>
<?php if ($c = OCILogon("scott", "tiger", "orcl")) {
$s = OCIParse($c, "select ename, sal from emp"); OCIExecute($s, OCI_DEFAULT); while (OCIFetch($s)) { echo "ename = " . ociresult($s, "ENAME") . ", sal = " . ociresult($s, "SAL") . "<br/>"; } OCILogoff($c);
} else { $err = OCIError(); echo "Oracle
Connect Error " . $err[text]; } ?>
<hr/>
<?php if ($c = ora_logon("scott@orcl","tiger")) {
$curs = ora_do($c, "SELECT ename, sal FROM emp"); while (ora_fetch($curs)) { echo "ename = " . ora_getcolumn($curs, 0) . ", sal = " . ora_getcolumn($curs, 1) . "<br/>"; } ora_logoff($c);
} else { echo "Oracle Connect Error " . ora_error(); } ?>
<hr/>
</body>
</html>
Снова поместим файл в htdocs и обратимся по адресу .
Этот пример для наглядности упрощен, а в жизни нужно будет больше уделить места обработке ошибок и структуризации кода.
Вот пример вставки записи в БД. Данные передаются через строку запроса HTTP. Это позволяет организовать в приложении содержательный диалог, подключив средства ввода форм HTML.
Подготовим файл insert.php:
<html>
<head><title>Access to Oracle from php</title></head>
<body>
<h3>INSERT example:</h3>
<?php if ($c = OCILogon("scott", "tiger", "orcl")) {
$name = (string)$_REQUEST['empname']; $no = (int)$_REQUEST['empno'];
$query = "INSERT INTO emp (ename, empno)
VALUES (:bind1, :bind2)"; $s = OCIParse($c, $query); OCIBindByName($s, ":bind1", $name); OCIBindByName($s, ":bind2", $no);
OCIExecute($s, OCI_DEFAULT); OCICommit($c); OCILogoff($c);
} ?>
Done. <hr/>
</body>
</html>
Поместим файл в htdocs и обратимся по адресу . В SQL*Plus или предыдущей страницей PHP можно проверить результат. Обратите внимание на то, что в приведенном примере никак не обрабатывается (а) блокировка строк, возможно мешающая вставке и (б) возможный конфликт первичного ключа.