Основы PHP
  Что такое PHP?
  Возможности PHP
  Преимущества PHP
  История развития
  Что нового в PHP5?
  «Движок» PHP
  Переход на PHP 5.3
New Переход на PHP 5.6
  Введение в PHP
  Изучение PHP
  Основы CGI
  Синтаксис PHP
  Типы данных PHP
  Переменные в PHP
  Константы PHP
  Выражения PHP
  Операторы PHP
  Конструкции PHP
  Ссылки в PHP
  PHP и ООП
  Безопасность
  Функции PHP
  Функции по категориям
  Функции по алфавиту
  Стандартные функции
  Пользовательские
  PHP и HTTP
  Работа с формами
  PHP и Upload
  PHP и Cookies
  PHP и базы данных
  PHP и MySQL
  Документация MySQL
  Учебники
  Учебники по PHP
  Учебники по MySQL
  Другие учебники
  Уроки PHP
  Введение
  Самые основы
  Управление
  Функции
  Документация
  Математика
  Файлы
  Основы SQL
  Дата и время
  CURL
  Изображения
  Стили
  Безопасность
  Установка
  Проектирование БД
  Регулярные выражения
  Подготовка к работе
  Быстрый старт
  Установка PHP
  Установка MySQL
  Конфигурация PHP
  Download / Скачать
  Скачать Apache
  Скачать PHP
  Скачать PECL
  Скачать PEAR
  Скачать MySQL
  Редакторы PHP
  Полезные утилиты
  Документация
  PHP скрипты
  Скачать скрипты
  Инструменты
  PHP в примерах
  Новости портала
 Главная   »  Сборник статей
 
 

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

Автор: Андрей Транский

Мы все привыкли к 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 по умолчанию. А это много значит.

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

 
 » Обсудить эту статью на форуме

 
 Сборник статей 
 Содержание раздела 
Есть еще вопросы или что-то непонятно - добро пожаловать на наш  форум портала PHP.SU 
 

 
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS