Задавайте вопросы, мы ответим
Вы не зашли.
о библиотеке DbSimple
Что в ней хорошего?
Что в ней плохого?
И вообще - стоит ли использовать?
http://dklab.ru/lib/DbSimple/manual.html
Неактивен
Выглядит она хорошо, листинг простой и читаемый. Пожалуй, это все, что я могу
сказать о ней хорошего.
Теперь о плохом. Плохая осмысленность. С одной стороны, библиотека призвана
абстрагировать нас от конкретной БД, но
Обращаю особое внимание на то, что DbSimple намеренно не занимается
«выравниваниием диалектов» SQL в различных СУБД"
.
Возникает законный вопрос - зачем мне использовать библиотеку абстрагирования,
если она не выполняет своей роли?
Если же не абстрагироваться от реализации, то, разумеется, родные функции mysql
будут работать быстрее, т.к. в конечном итоге любая библиотека сводится к ним.
Стоит ли использовать - сложный вопрос. Я бы не стал, просто потому что мне проще
написать
mysql_connect('host', 'user', 'password');
вместо
$DB = DbSimple_Generic::connect("mysql://user:password@host/db");
Наверное, это дело привычки. Скорее всего, автор библиотеки сталкивался с каким-то
кругом проблем, которые эта библиотека решила, потом ее обобщил, но вот реальные
цели библиотеки написать постеснялся.
P.S. Разумеется, это лично мое мнение
Неактивен
Сейчас вот еще смотрю ее код - в принципе если не обращать внимания
на псевдомногобазовость - в ней есть неплохая функциональность, которую
(если Вам она нужна, конечно) действительно легко использовать.
Правда, тут мы упираемся опять в философский спор на тему "что же нужно
обычному человеку от базы данных" Например, функциональность
"кэширование ответа" в PHP я считаю не только ненужной, но и вредной -
PHP ест память на данные, в то время как с кэшированием ответов отлично
справляется и сам MySQL... А placeholders, с другой стороны, - просто отличный
код.
Из этой библиотеки, пожалуй, стоит выдрать код для placeholders (кстати,
какая лицензия у библиотеки?) и использовать его
Неактивен
ну к БД подключаещся один раз. в начале.
$setting['dbHost'] = "localhost";
$setting['dbUser'] = "username";
$setting['dbPass'] = "password";
$setting['dbName'] = "databasename";
$setting['dbPrefix'] = "table_"
а потом код выглядит примерно вот так:
$DB->query('INSERT INTO ?_firma (name, vid, url, email, text, keywords, createdatetime, hide, uniq_id) VALUES
(?,?,?,?,?,?,?,?,?d)',
$_POST['name'], $_POST['vid'], $_POST['url'], $_POST['email'], stripslashes($_POST['text']), $_POST['keywords'], $datetime, $hide, $_POST['uniqid']);
или так
$DB->query('UPDATE ?_firma SET
name=?, vid=?, url=?, email=?, text=?, keywords=?, editdatetime=?, hide=?
WHERE id=?',
$_POST['name'], $_POST['vid'], $_POST['url'], $_POST['email'], stripslashes($_POST['text']), $_POST['keywords'], $datetime, $hide, $_POST['id']);
вопрос остался: стоит использовать или нет?
Неактивен
А почему Вы используете strip_slashes только над текстом? У остальных полей
тоже есть добавления кавычек ведь, нет?
Хитрость в том, что DB->query сделает addslashes автоматически. Т.е. по сути
Вы делаете много лишних действий.
Использовать или нет - решайте сами, в таком виде код выглядит достаточно просто.
Я знаю, что мне не нравится. Библиотека пытается привить PHP другой стиль
мышления. Тот, к которому я не привык. Лично я PHP не люблю вообще, поэтому,
наверное, скептически отношусь и к библиотекам "улучшающим" его.
Если бы я писал код на PHP (мне повезло, сейчас за меня на PHP пишут другие люди ),
я бы, наверное, сделал функцию mysql_query_ph ($query, $p1, $p2, ...), которая делает
одну подстановку в placeholders и запускает mysql_query над полученным выражением.
Неактивен
У меня вообще такое впечатление, что от использования подобных вещей программист, скорее всего, ничего не проигрывает, но и ничего не выигрывает (я лично обхожусь стандартным набором функций PHP).
Немного удобнее то, что не нужно беспокоиться о безопасности входных параметров, т.к. экранирование, как я понял, встроено в работу библиотеки (метод escape()); ну и еще строки в кавычках необязательно писать - это, пожалуй, достаточно удобно.
Однако, мне все же кажется, что большого выигрыша тут все же не получится.
Тот же код без использования библиотеки можно написать так:
$P = array_map('mysql_escape_string', $_POST);
$sql = "INSERT INTO table_firma (name, vid, url, email, text, keywords, createdatetime, hide, uniq_id) VALUES ('$P[vid]', $P[vid], ... )";
mysql_query($sql);
Согласитесь, разница не очень большая.
Кроме того, часто бывает удобно вытащить все операции с БД в отдельные небольшие функции; и даже если в этих функциях будет на пару строк меньше, отца русской демократии это не спасет.
Впрочем, есть немало моментов довольно приятных, поэтому если Вы уже к этой библиотеке привыкли, то Вам вполне может быть удобно с ней работать.
Неактивен