Профессиональная разработка Web-приложений.  
Боишься нашего дизайна?
Новости
PDF журнал
Участники проектa
Сотрудничество
Ссылки
Карта сайта
Комментарии
Комментарии к статье
Добавить комментарий
Обсудить на форуме
Информация об авторе
Оценка статьи

Использование PEAR для доступа к базе данных

Мы все привыкли к MySQL. Мы любим его за простоту, легкость освоения и множество программ для облегчения работы (phpMyAdmin). Мы делаем скрипты и задумываемся, а вдруг у заказчика стоит другая SQL-база? И вот тут мы начинаем выдумывать или скачивать классы для работы с различными базами. А не проще ли использовать готовое, да ещё к тому же включенное по умолчанию в дистрибутив php?

Мы все привыкли к MySQL. Мы любим его за простоту, легкость освоения и множество программ для облегчения работы (phpMyAdmin). Мы делаем скрипты и задумываемся, а вдруг у заказчика стоит другая SQL-база? Как сделать универсальность, когда наши скрипты не зависят от базы данных?

И вот тут мы начинаем выдумывать или скачивать классы для работы с различными базами. А зачем морочить голову и думать, как проверить, работает ли на остальных 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, которая создает новую последовательность с помощью createSequence()

Что бы понять, я объясню проще: в базе данных создается таблица с одним полем, в котором и будет находиться увеличивающееся значение счетчика записей. Сразу скажу, что если вы удалите в середине запись, то последовательность не уменьшится! Т.е. если было 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()."
".$error_obj->getDebugInfo()); } else { die("Ваш запрос не выполнен. Повторите попытку позже."); } } # функция обработки ошибок PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'handle_pear_error'); #Устанавливаем, что при возникновении ошибки использовать нашу функцию. ?>

Вот, собственно, и всё. Более подробную информацию о PEAR, где есть и шаблоны, и работа с почтой, и многое другое, вы можете узнать, посетив официальную страничку PEAR или русскоязычную документацию.

Цель данной статьи - не конкуренция мануалу, а возможность дать понять, что иногда не стоит изобретать велосипед, а "стоит посмотреть под ноги" и увидеть, что многое есть уже готовое, да к тому же официально включено в PHP по умолчанию. А это много значит.

Источники информации

  • Официальный сайт PEAR
  • Русскоязычный мануал PEAR


  • For comment register here
       2002-11-01 13:01

       2002-11-02 14:44

       2002-11-02 22:58

       2002-11-04 02:34

       2002-11-04 11:46

       2002-11-15 13:21

       2002-11-18 19:48

       2002-11-19 10:55

       2002-11-19 17:51

       2002-11-19 18:40

       2002-11-21 11:04

       2002-11-21 20:35

       2002-12-06 20:09

       2002-12-09 16:29

       2002-12-09 19:11

       2002-12-18 14:32

       2002-12-18 14:35

       2003-08-01 13:23

       2005-01-30 04:13

    Мы все привыкли к MySQL. Мы любим его за простоту, легкость освоения и множество программ для облегчения работы (phpMyAdmin). Мы делаем скрипты и задумываемся, а вдруг у заказчика стоит другая SQL-база? И вот тут мы начинаем выдумывать или скачивать класс

     
     
     
        © 1997-2008 PHPClubTeam
    []