Автор Тема: Evo. Классы ezSQL и ezDB, DAL, работа с разными БД  (Прочитано 2256 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн sadex13

  • Модератор
  • Разработчик
  • *****
  • Сообщений: 1097
    • Просмотр профиля
  • Версия modx: Evo 1.0.6, ClipperCMS 1.2.6
Evo. Классы ezSQL и ezDB, DAL, работа с несколькими БД на PHP

Стандартные функциям PHP для работы с БД MySQL типа mysql_* (старое расширение) или mysqli_* (новое расширение) обеспечивают взаимодействие только с БД одного типа - MySQL. В то же время иногда в рабочем проекте приходится использовать БД другого типа. В этом случае рекомендуют использовать, например, DAL - Database Abstraction Layer, как некое API, позволяющее посредством использования универсальных функций писать PHP-коды, работающие с несколькими БД без применения ORM.

Для небольших проектов наиболее популярным, пожалуй, в свое время был класс PHP ezSQL, автором которого является Джастин Винсент (Justin Vincent). Этот класс дает возможность работать с несколькими популярными базами данных - MySQL, SQLite, PostgreSQL, Oracle и т.д. 

ezSQL позволяет работать с большим количеством различных баз данных одинаково легко. Хотя нужно отметить, что ezSQL не поддерживает разницу в реализации синтаксиса SQL среди различных баз данных. По поводу практики применения ezSQL можно сказать, например, что в популярной CMS WordPress для работы с БД применяется класс wpdb, который основан на ezSQL.

Скачать ezSQL и посмотреть его в работе можно через сайт его создателя, Джастина Винсента:
http://justinvincent.com/ezsql

Для того чтобы использовать ezSQL в проекте, надо включить два файла: первый - ez_sql_core.php (ядро ezSQL); второй зависит от типа используемой БД. Чтобы использовать ezSQL для MySQL, нужно включить файл ez_sql_mysql.php.

После включения указанных файлов нужно создать объект ezSQL. Это легко выполняется с указанием имени базы данных, имени пользователя, его пароля и сервера базы данных. Следующий пример демонстрирует включение требуемых файлов и создание объекта ezSQL:

include_once "../shared/ez_sql_core.php";
include_once "ez_sql_mysql.php";
$db = new ezSQL_mysql('имя_пользователя_БД','пароль_пользователя_БД','имя_БД','сервер_БД');

После этого появляется объект $db, который можно использовать для выполнения запросов к базе данных.

Пример запрроса выборки строки

Метод get_row используется для извлечения строки из базы данных. В примере выполняется запрос, и выводятся полученные данные:

$user = $db->get_row("SELECT name, email FROM users WHERE id = 4");
echo $user->name;
echo $user->email;

В классе ezSQL имеются и другие методы, примеры использования которых можно посмотреть на сайте разработчика:
http://justinvincent.com/ezsql

Перечень некоторых методов класса ezSQL:

vardump - вывод содержимого любой переменной;
select - выбор новой базы данных;
get_col_info - получает информацию об одном или всех столбцах с указанным именем или типом;
hide_errors - отключение вывода ошибок в окно браузера;
show_errors - включение вывода ошибок в окно браузера;
escape - форматирование строки для предотвращения ошибочных запросов.

Также определены и вспомогательные переменные:

num_rows - номер или номера строк возвращенные последним запросом (если таковые имеются);
insert_id - генерирует автоинкриментирующееся ID, исходя из предыдущего значения (если таковое имеется);
rows_affected  -количество строк по последним INSERT, UPDATE, DELETE;
num_queries - отслеживает, сколько "реальных" запросов было выполнено в течение жизни текущего скрипта;
debug_all - если установлено true, тогда будут печататься все запросы и их результаты;
cache_dir - путь к папке MySQL кэширования;
cache_queries - флаг Boolean (см. mysql/disk_cache_example.php);
cache_inserts - флаг Boolean (см. mysql/disk_cache_example.php);
use_disk_cache - флаг Boolean (см. mysql/disk_cache_example.php);
cache_timeout -количество часов (см. mysql/disk_cache_example.php);

Вышеприведенная информация дает представление о том, как с помощью класса ezSQL можно организовать на PHP работу с несколькими БД. Класс ezSQL представляет интерес не столько с точки зрения его непосредственного применения, сколько с точки зрения подхода к созданию простого DAL, позволяющего в PHP работать с несколькими БД.

Следующий класс - класс ezDB - является неким частным улучшением возможностей класса ezSQL. В частности, ezDB содержит файл ezdb_mysqli.class.php, являющийся классом, который для работы с БД MySQL позволяет использовать функции нового расширения PHP - ext/mysqli. Автором класса ezDB является Набил Шахад (Nabeel Shahzad), скачать этот класс можно с гитхаба:
https://github.com/nshahzad/ezdb

Также на гитхабе wiki имеется описание этого класса с примерами:
https://github.com/nshahzad/ezdb/wiki

Пример реализации функции соединения с БД MySQL на MySQLi, взятый из файла ezdb_mysqli.class.php:

public function connect($dbuser='', $dbpassword='', $dbhost='localhost')
{
$this->dbh =  new mysqli($dbhost, $dbuser, $dbpassword);

if(mysqli_connect_errno() != 0)
{
if($this->throw_exceptions)
throw new ezDB_Error(mysqli_connect_error(), mysqli_connect_errno());

$this->register_error(mysqli_connect_error(), mysqli_connect_errno());
return false;
}
else
{
$this->clear_errors();
return true;
}

return true;
}

Вообще файл ezdb_mysqli.class.php как исходник интересен как пример реализации функций ext/mysqli для работы с БД MySQL. Подход, примененный в классах ezSQL и ezDB, показывает альтернативу применению PDO и ORM для работы с несколькими БД на PHP. Хотя в классе ezSQL само PDO, как отдельная реализация - файл ez_sql_pdo.php - также имеется и применяется.

Более современные и функциональные DAL:

PHPBB DAL http://wiki.phpbb.com/Database_Abstraction_Layer
Joomla DAL http://api.joomla.org/Joomla-Framework/Database/JDatabase.html
ADOdb http://phplens.com/adodb/
Zend_db
Doctrine DAL (без ORM)
 
Подробности:
http://stackoverflow.com/questions/7807851/best-php-dal-data-abstraction-layer-so-far
« Последнее редактирование: 02 Декабрь 2012, 17:31:18 от sadex13 »
FluxBB (PHP/MySQL) - легкий и быстрый форум для MODX с открытым кодом, минимальные требования к ресурсам.