Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа.doc
Скачиваний:
8
Добавлен:
05.12.2018
Размер:
638.46 Кб
Скачать

3 Php и Oracle

СУБД Oracle, когда против желания фирмы-изготовителя, а когда согласно – в зависимости от направления политических ветров в конкретные периоды времени, – никогда, кроме начального периода своего существования, не была полностью закрытой системой.  Например, с момента возникновения движения свободного ПО, разработки, ведущиеся открытым образом («открытыми текстами»), все время держали эту СУБД в зоне своих интересов.  Когда некоторые представители такого ПО стали достаточно зрелыми, фирма Oracle, подобно другим крупным фирмам, «легализовала» связь своей СУБД с ними:  ОС Linux входит в число стратегических платформ для Oracle, web-сервер Apache входит в состав штатной поставки; там же можно обнаружить следы Perl и Tcl, нашедших себе место во внутреннх процессах установки (OUI) и администрирования (OEM).  Эти средства помогают организовать взаимодействие с Oracle вместо средств собственной разработки (например, Developer) или в дополнение к ним.

3.1 Работа с Oracle

Обращение с помощью 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://localhost:7778/employees.php.

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

Вот пример вставки записи в БД.  Данные передаются через строку запроса 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 и обратимся по адресу http://localhost:7778/insert.php?empname=Вася&empno=1111.  В SQL*Plus или предыдущей страницей PHP можно проверить результат.  Обратите внимание на то, что в приведенном примере никак не обрабатывается (а) блокировка строк, возможно мешающая вставке и (б) возможный конфликт первичного ключа.