Прошу прощения за непоследовательность изложения, но пропустить такую тему в данном случае я бы очень не хотел. Касаться темы "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!!!