- •Содержание
- •Введение
- •1 Область применения.
- •2 Возможности php
- •2.1 Существуют три основных области, где используется php.
- •3 Php и Oracle
- •3.1 Работа с Oracle
- •4 Преимущества php
- •4.1 Традиционность
- •4.2 Простота
- •4.3 Эффективность
- •4.4 Безопасность
- •4.5 Гибкость
- •4.5 Бесплатное распространение
- •5 «Движок» php
- •6 Синтаксис php
- •6.1 Общие понятия
- •6.2 Php и html
- •7 Контрольный пример
- •Список используемой литературы
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 можно проверить результат. Обратите внимание на то, что в приведенном примере никак не обрабатывается (а) блокировка строк, возможно мешающая вставке и (б) возможный конфликт первичного ключа.