|
|
|||||||||||||||||||||||||||||
|
Использование PEAR для доступа к базе данныхИсточник: php Андрей Транский
Автор: Андрей Транский Мы все привыкли к MySQL. Мы любим его за простоту, легкость освоения и множество программ для облегчения работы (phpMyAdmin). Мы делаем скрипты и задумываемся, а вдруг у заказчика стоит другая SQL-база? И вот тут мы начинаем выдумывать или скачивать классы для работы с различными базами. А не проще ли использовать готовое, да ещё к тому же включенное по умолчанию в дистрибутив php? И вот тут мы начинаем выдумывать или скачивать классы для работы с различными базами. А зачем морочить голову и думать, как проверить, работает ли на остальных SQL базах то, что мы написали? А не проще ли использовать готовое, да ещё к тому же включенное по умолчанию в дистрибутив php? Это прекрасное дополнение к php, о котором вы больше сможете узнать посетив их Сегодня попробуем разобраться с их классом DB, отвечающим за доступ к различным базам данных (MySQL, PostgreSQL, Oracle 7/8/8i, Microsoft SQL, InterBase, MiniSQL, SyBase, Informix, FrontBase и универсальный ODBC). Как ни стандартно, при разработке проектов мы сделаем один файл connect.php, который будет подключатся к нашей базе в каждом скрипте, где это необходимо: ------------- connect.php ------------ <?PHP require_once("DB.php"); #подключаем класс DB PEAR $TypeSQL= "mysql"; $Host="localhost"; $User="YourPasswordSQL" $Name="YourNameSQL"; $Dbase="MyDBase"; //Все так же, как и делали раньше, только добавилась переменная $TypeSQL, в которой мы //и указываем, какая у нас База Данных. # прописываем источник DSN http://pear.sourceforge.net/manual/core.db.tut_dsn.php $dsn="$TypeSQL://$User:$Password@Host/$Dbase" $db= DB::connect($dsn, true); #Что соответствует знакомому по MySQL: mysql_db_connect() и mysql_db_select $db->setFetchMode(DB_FETCHMODE_ASSOC); //выбор формата выбираемых строк. В нашем случае мы используем // fetchRow().А вообще, кому что нравится //http://pear.sourceforge.net/manual/core.db.setfetchmode.php. ?> Вот, в принципе, и весь наш connect. И если мы захотим использовать другую базу данных, нам в этом скрипте необходимо заменить значение переменной $TypeSQL, к примеру, на "pgsql" (PostgreSQL). Теперь приступим, собственно, к созданию запросов и работой с нашей базой данных. <?PHP require_once("connect.php"); #Подключаемся к Базе Данных. $sql= "SELECT * FROM MyTable"; $res= $db->query($sql); #Выполняем наш запрос (аналогия mysql_query() ) $num= $res->numRows(); #Определяем количество строк (аналогия mysql_num_rows() ) while($row= $res->fetchRow()) { $id= $row["id"]; $name= $row["name"]; } #Получаем необходимые нам данные (аналогия mysql_fetch_array() ) #Или другим удобным для Вас методом подробнее http://pear.sourceforge.net/manual/ $res->free(); #освобождаем память (аналогия mysql_free_result() ) ?> Ничего сложного нет. Если вы работали с другими базами кроме MySQL то вы возмутитесь, сказав, что у MySQL есть такой замечательный метод, как auto_increment, а в других базах это реализовано по другому. Попытаюсь объяснить, как НЕ ИСПОЛЬЗОВАТЬ сразу auto_increment с MySQL и потом не иметь головной боли при переходе на другую базу данных. В PEAR есть замечательная штука Sequence, которая создает новую последовательность с помощью Что бы понять, я объясню проще: в базе данных создается таблица с одним полем, в котором и будет находиться увеличивающееся значение счетчика записей. Сразу скажу, что если вы удалите в середине запись, то последовательность не уменьшится! Т.е. если было 1,2,3,4,5 и вы удалите запись 3 то будет 1,2,4,5.., и следующая последовательность будет 6, а не 3! Последовательность нам необходима, когда мы делаем вставку в базу данных, т.е. INSERT <?PHP require_once("connect.php"); $id= $db->nextID(w_, MyTable); # Эта функция возвращает следующее число, находящееся в таблице последовательности. # Если таблица последовательности еще не была создана, то она создается. # В скобках пишется имя таблицы последовательности. # для удобства используется имя таблицы данных и приставка w_ для того, что бы все # таблицы последовательностей находились внизу при просмотре всей базы. # Не забудь! При создании таблицы НЕ УКАЗЫВАТЬ auto_increment в MySQL или другие # увеличения в других базах. PEAR сделает все сам. $sql= "INSERT INTO MyTable VALUES('$id', '$name')"; $res= $db->query($sql); $res->free(); ?> Внимательный читатель сделает замечание: "А обработка ошибок?!" И будет прав. Мы здесь её нигде не делали. Для обработки ошибок будем использовать PEAR. Подробнее можно почитать Мы же здесь используем обработчик ошибок (режим PEAR_ERROR_CALLBACK) на основании нашей функции, который будет вызываться и останавливать работу в любом месте программы, где вызвана ошибка, с подробным описанием. Для этого используем наш файл connect.php <?PHP define(DEBUG_ENV, true); #Устанавливаем именованную константу. И когда наш сайт готов и мы можем его #использовать, устанавливаем в FALSE, что бы нашим пользователем не выдавался код и #сообщение, а просто стандартное сообщение на ошибку. function handle_pear_error($error_obj) { if(DEBUG_ENV) { die($error_obj->getMessage()." Вот, собственно, и всё. Более подробную информацию о PEAR, где есть и шаблоны, и работа с почтой, и многое другое, вы можете узнать, посетив Цель данной статьи - не конкуренция мануалу, а возможность дать понять, что иногда не стоит изобретать велосипед, а "стоит посмотреть под ноги" и увидеть, что многое есть уже готовое, да к тому же официально включено в PHP по умолчанию. А это много значит. Источники информации Ссылки по теме
|
|