Шаг 18 - Лирическое отступление, функции для Oracle

Прошу прощения за непоследовательность изложения, но пропустить такую тему в данном случае я бы очень не хотел. Касаться темы "PHP и Oracle" я не планировал (по крайней мере в обозримом будущем). Но на днях пришлось-таки сделать выборку с базы на Oracle. Т.к. тема эта, вообще говоря, популярна, то я посчитал нужным сделать отступление от "генерального плана" и вкратце описать структуру скрипта, осуществляющего работу с базой на Oracle-сервере.

Сразу оговорюсь. В PHP есть две группы функций для работы с БД на Oracle: "Oracle function" и "Oracle 8 function". Последняя, как ясно из названия, предназначена для работы с ораклом 8-й версии. Я же делал выборку из базы на 7-м оракле. Поэтому продемонстрирую работу с первой группой.

Общая схема такова. Есть сервер oracle и есть клиент (в моем случае Windows NT). На клиентской машине установлен клиент Oracle (нужен SQL-NET). Пусть в TNSNAMES.ora прописан коннект к oracle-базе с именем TEST. Допустим, есть таблица такой структуры:

TEST_TAB: field1, field2, field3, field4. Выберем поля field1, field2 и field4.

Теперь сам скрипт:

$user='user';
$tns='test';    //имя из TNSNAMES.ora
$pass='password';   //крутой пароль ;)
//выбираемые из таблицы поля
$fields=split(',',"field1,field2,field4");
//формируем строку запроса
$sql="select ".implode(',',$fields)." from test_tab where field1='значение'";
//коннект
$conn=ora_logon("$user@$tns","$pass") or die('Error ORA_LOGON');
//создали курсор
$cur=ora_open($conn)  or die(ora_errorcode($conn).': '.ora_error($conn));
$defer=0;   //а что это такое - я пока, увы, не знаю :-(
//парсинг строки sql-запроса и связывание ее с курсором
ora_parse($cur,$sql,$defer) or die(ora_errorcode($cur).': '.ora_error($cur));
//выполнить запрос к базе
ora_exec($cur) or die(ora_errorcode($cur).': '.ora_error($cur));
//формируем вывод результатов выборки
echo '<table border=1><tr>';
for($col=0;$col < count($fields);$col++) {    //заголовок
	$col_nam=Ora_ColumnName($cur,$col);     //имена колонок (или алиасы)
	$col_typ=Ora_ColumnType($cur,$col);     //типы полей в выборки - для иллюстрации
	echo "<th>$col_nam<br>($col_typ)</th>";
}
while(ora_fetch($cur)) {    //выбираем значения по строкам
	echo '</tr><tr>';
	for($col=0;$col < count($fields);$col++) {
		$result=ora_getcolumn($cur,$col);
		echo "<td>$result</td>";
	}
	echo '</tr>';
}
echo '</table>';
ora_close($cur);        //удалить курсор
ora_logoff($conn);      //разорвать соединение

Вы, наверное, заметили, что в целом логика работы с oracle-базой похожа на работу с MySQL. Разве, что парсинг запроса вынесен в отдельную функцию.

P.S. Вот и вышел PHP 4.0.4 ! Говорят, там gd-функции работают и в режиме "PHP как модуль Apache". (Это я в PHP-конференсии прочел ;)

P.S.S. Отличная новость! BooksRu начал принимать предварительные заказы на Кастаньетто и др. Профессиональное программирование на PHP!!!


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Константин Платонов - 25.12.2000