Доброе время суток всем!
Как обещал ранее, а также по просьбе некоторых пользователей хабра выкладываю в сеть новый вариант эмулятора 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