(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

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

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

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 27.07.2012 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
ARCHICAD 21, локальная лицензия на 12 месяцев
IBM Domino Enterprise Server Processor Value Unit (PVU) License + SW Subscription & Support 12 Months
SAP CRYSTAL Reports 2013 WIN INTL NUL
SAP® Crystal Dashboard Design Departmental 2016 WIN INTL NUL
Oracle Database Personal Edition Named User Plus License
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
OS Linux для начинающих. Новости + статьи + обзоры + ссылки
Программирование на Visual Basic/Visual Studio и ASP/ASP.NET
Все о PHP и даже больше
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100