Эмулятор PEAR DB средствами PDO с некоторым расширением функционала или простая надстройка над PDO

в 10:03, , рубрики: mysql, PDO, php, php5, метки: , ,

Доброе время суток всем!
Как обещал ранее, а также по просьбе некоторых пользователей хабра выкладываю в сеть новый вариант эмулятора PEAR DB сделанный на основе PDO и успешно работающий с новыми версиями PHP. Скачать можно здесь (из раздела Code, ветка trunk) или здесь, а также используя snv
так: svn checkout svn://svn.code.sf.net/p/peardb2pdo/code/trunk peardb2pdo-code
или так: svn checkout svn.code.sf.net/p/peardb2pdo/code/trunk peardb2pdo-code

При желании код можно взять за основу при создании новых проектов где не хочется использовать тяжеловесные надстройки над базой.

Лицензия: GNU General Public License .

Далее подробнее ...

Как написано в заголовке, все переписано под PDO и рассчитано на работу с последними версиях PHP.
Код тестировался на одном (пока не завершенном) проекте. Работает вроде нормально. Пара функций специфична для MySQL но при желании от специфики можно избавиться (см. свойство класса $server). Добавлена возможность параметризированных запросов ну и прочие мелочи которые будут понятны из примеров ниже и кода класса, думаю любой разберётся. Пожелания и поправки приветствуются. Судя по отклику на первую статью проблема «соскока» с PEAR DB актуальна. Возможно стоило ещё потестировать и отполировать но люди торопят, просят скорее выложить, потому предлагаю сделать это вместе с теми кому это интересно и нужно.

Замечания/предложения/правки просьба в личку или в дискуссию на страничке проекта с кусками кода который на Ваш взгляд стоит поправить или дополнить.

Далее несколько примеров:

1.Подключение

require_once 'includes/classes/classERROR.php'; 
require_once 'includes/classes/classMYSQLPDO.php';
$db = new DB();

$show_errors = false;
$stop_after_error = false;
$on_error_rollback = true;

if(!$db->connect('localhost','user','pass',	'database','table_preffix_',$show_errors ,					$stop_after_error,	$on_error_rollback ))
						{
							echo "DB Connect Error!";
							exit();
						}

2. Параметризованный запрос — Вариант 1:

$params['person_id']=array('57FA56C2',8);
$params['nickname']=array('USER',5);
print_r($db->getAll("select * from persons WHERE person_id=:person_id and nickname=:nickname",$params));
echo "  Число полей: ".$db->fcount();
echo "  Число записей: ".$db->rcount();

// Повтор запроса с другими параметрами

$params['person_id']=array('2457A5F',8);
$params['nickname']=array('ADMIN',6);
print_r($db->repeat($params));
echo "  Число полей: ".$db->fcount();
echo "  Число записей: ".$db->rcount();

3. Параметризованный запрос — Вариант 2:

print_r($db->getRow("select * from persons WHERE person_id=? LIMIT 1",array('57FD56C2')));
echo "  Число полей: ".$db->fcount();

Параметр: $alias в функциях позволяет разделить SQL запросы на сессии (для случаев когда необходимо комбинировать несколько параметризированных запросов напр. в одном цикле (дабы не происходило смешивание параметров и результатов выполнения некоторых функций).

Надеюсь не сильно всех утомил. Остальные возможности вполне очевидны и понятны из кода. Просьба сильно не пинать а при желании помочь довести код до ума т.к. потребность в нём, судя по письмам с просьбой выложить, реально есть и люди торопят. В случае обнаружения ошибок просьба уведомить автора.

Спасибо за внимание. Надеюсь кому то помог. Если нет то просто посмотрите мои фотки :) там это поможет побороть расслабиться и забыть :)
с Уважением Михаил Червоненко/Mikhail Tchervonenko.

п.с. Класс обработки ошибок выложен в старом варианте со всеми недостатками, до него руки пока не дошли и возможно в скором будующем не дойдут (лично меня он устраивает в таком варианте как есть). Не вижу особой нужды что то в нем менять но если кто то его улучшит с радостью выложу его в проекте.

Автор: RusMikle

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js