goDB — библиотека для работы с MySQL из PHP.

19 Июн 2008

GoDB - MySQLi-интерфейс PHPКогда мои логические цепочки запросов заводят меня в MySQL-тупик, я сначала ищу в сети информацию, потом лезу в толстую книжку, потом обращаюсь к коллегам. Поскольку мы сейчас работаем с командой PHP.RU, то последний способ оказывается практически 100%-эффективным.

Именно эти люди убедили меня разобраться в интерфейсе GoBD – надстройки над MySQLi, делающей код работы с базой данных быстрее и короче, а модель плейсхолдеров – безопаснее.

Надстройки для работы с БД – любимое занятие PHP-программистов, но GoDB – не тот случай. Эта библиотека успешно прошла бенчмарки на надёжность и скорость и разработана действительно опытным человеком не без участия сообщества.

  • Разработчик GoDB: Григорьев Олег (aka vasa_c).
  • Требования для работы GoDB: PHP5 с расширением MySQLi.
  • Сайт GoDB.
  • Сайт MySQLi.

Жилинский Владимир.






 

Sam     .

Написано 19 июня 2008 года в 16:51


Как она, если сравнить к Котеровской DBSimple?

 

Жилинcкий Владимир     .

Написано 19 июня 2008 года в 16:52


Не знаком со второй. Сейчас спрошу у Андреева с Григорьевым, может они знают =)

 

vasa_c     .

Написано 19 июня 2008 года в 17:29


>Как она, если сравнить к Котеровской DBSimple?
Мне котеровская не понравилась, поэтому написал так как мне нравится :) Беспристрастно же сравнивать не могу.
Вообще DBSimple довольно старая, еще под php4. Много устаревшего, как в плане PHP, так и в плане MySQL (используется старое mysql-расширение).

 

vasa_c     .

Написано 19 июня 2008 года в 17:30


PS. Жилинcкий Владимир, спасибо за ПЕАР :)

 

Жилинcкий Владимир     .

Написано 19 июня 2008 года в 17:39


Я сейчас “Коллег” на GoDB переписываю, шустро получается.

 

Артём Курапов     .

Написано 19 июня 2008 года в 18:27


Внешне похожа на DBSimple и Pear DB2 со смесью PDO. Переходить не собираюсь, потому что похожую конструкцию использовал уже года три назад, сейчас юзаю более мне конструкцию вида
$my_table->arr();
Модель называется. Кроме как в руби не слышал что-бы кто-то такое использовал. Имхо это удобней чем полный запрос писать.

 

vasa_c     .

Написано 19 июня 2008 года в 18:35


А что делает конструкция my_table->arr() ?

 

Sam     .

Написано 19 июня 2008 года в 18:36


Наверняка возвращает по заданному критерию массив столбцов таблицы.

 

vasa_c     .

Написано 19 июня 2008 года в 19:01


А как она будет выглядеть, когда нужно выбрать данные из десяти таблиц, связанных хитро.ми joinами?

 

Sam     .

Написано 19 июня 2008 года в 19:04


Это у Артёма надо спросить…

 

Артём Курапов     .

Написано 19 июня 2008 года в 19:14


Если надо делать join, то вид сложней..
$sys_user->arr(
“is_active=1”, // Where
“t1.ID, t1.first_name, t2.title” // Select
$sys_user->table.” t1,”.$sys_usergroup->table.” t2″ // FROM
)

В случае если имя таблицы изменится, то параметр table надо будет менять только в одном месте. Конечно люди этот участок по разному реализуют – в т.ч. ассоциативными массивами из настроек. В ruby on rails или где-то можно вроде как делать аналогично и динамические поля, но это помоему уже слишком.

Кроме метода arr я использую методы obj, int, arrint, insert, delete, update и тп.

 

Дмитрий Богданов     .

Написано 20 июня 2008 года в 01:25


не приветствую.

Есть куча других, гораздо продвинутых, библиотек для работы с Mysql.

Лично меня интересует то, чтобы это был не просто класс – а абстрактный. т.к. считаю удобным, использовать один и тот же интерфейс доступа к РАЗЛИЧНЫМ БД и СУБД.

Поэтому и использую ADODB.

 

Мульт     .

Написано 20 июня 2008 года в 02:31


Я люблю использовать Propel http://propel.phpdb.org/trac/
Основан на парадигмах ORM,OOP, технологиях php5, pdo, spl. Схема базы хранится в интуитивно-понятном xml, генератор генерит из него sql ddl описание и php классы, представляющие строки таблиц. Для простых операций к sql можно вообще не прибегать, а работать с методами объектов, но само собой есть возможность писать свои sql запросы

 

vasa_c     .

Написано 20 июня 2008 года в 10:51


Рассказал бы всё, что думаю об абстрактных классах и ОРМ в данном контексте, но не хочу устраивать на чужом блоге очередной холивар :)

 

Денис Радченко     .

Написано 21 июня 2008 года в 11:30


Библиотека очень похожа на DBSimple Котерова.
Не понимаю, зачем нужно …Array(1, “А это ‘два'”, 3)) в функции, когда есть func_get_args() ?

Какая выгода по скорости от использования MySQLi ?

 

Артём Курапов     .

Написано 21 июня 2008 года в 17:46


Денис, по скорости mysqli помедленней будет, но там помоему не надо делать real_escape_string + то что она объектная

 

vasa_c     .

Написано 21 июня 2008 года в 19:23


>Денис, по скорости mysqli помедленней будет, но там помоему не надо делать real_escape_string + то что она объектная

php_mysqli быстрее php_mysql. Местами в десятки раз. escape_string() всё же приходится делать, так как объектная структура и экранирование данных совершенно разные вещи :)

>Не понимаю, зачем нужно …Array(1, “А это ‘два’”, 3)) в функции, когда есть func_get_args() ?
А зачем нужно func_get_args, когда есть Array()? :)

 

vasa_c     .

Написано 21 июня 2008 года в 19:25


Прошу прощения
“не надо делать real_escape_string + то что она объектная” прочитал как “потому что она объектная”
но escape всё равно делать надо

 

Alex     .

Написано 23 июня 2008 года в 19:50


Спасибо за интересную информацию. Пхп начинаю только изучать, перехожу с С++, очень похоже, но любая информация очень полезна. Еще раз спасибо.

 

Здыхлик     .

Написано 24 июня 2008 года в 16:59


Очень нечитабельны запросы приведенного в доке типа:

$db->query(“select ?c from ?t where ?c=?i”, Array(“name”, “table”, “id”, $id), “el”);

ИМХО плейсхолдеры уместны, если в качестве параметров подставляем переменные. Все-таки имена таблиц и полей привычнее и удобнее видеть в теле запроса, а не как параметр.
Я неправ?

 

Жилинcкий Владимир     .

Написано 24 июня 2008 года в 17:07


Так оно и так работает:

$db->query(”select name from table where id=?i”, Array($id), “el”);

А в примерах показан путь максимального приведения в порыве программазма =)

 

Здыхлик     .

Написано 24 июня 2008 года в 17:46


О том и речь :)
Понятное дело, что работает, но ведь:
1. Лишние символы в коде
2. Сложнее читать
3. Еще и подставить надо -> дольше работает код
Потому и спросил, что излишества какие-то получаются…

 

Жилинcкий Владимир     .

Написано 24 июня 2008 года в 17:53


1. Наоборот. Получаем значение – не нужно больше ничего делать – короче код. Эта строчка даёт строку из выборки, конкретную.
2. Да не, просто всё. Сам пишешь – сам читаешь.
3. Опять нет, если я правильно понял =)

 

Здыхлик     .

Написано 24 июня 2008 года в 18:05


В общем, все, что я писал – про заранее известные параметры (названия таблиц, полей и т.д.).
Остальное – да, конечно: проверять, подставлять и т.п.
Короче, надо будет потестить на досуге..

 

vasa_c     .

Написано 24 июня 2008 года в 18:54


>Здыхлик
Где это может пригодится написано здесь – http://pyha.ru/go/godb/query/ в разделе “Плейсхолдеры таблиц и столбцов”.

 

Станислав Малкин     .

Написано 30 июня 2008 года в 08:22


А кто-то может внятно пояснить, чем кастомный класс будет лучше того же PDO? Я не думаю, что в скорости выигрыш будет на стороне этого набора для работы с MySQL.

Переубедите меня :)

 

Rin     .

Написано 6 августа 2008 года в 11:32


Посмотрите ещё на класс MysqlRapid, http://forum.dklab.ru/viewtopic.php?p=139350

 

voyager     .

Написано 24 октября 2013 года в 20:04


Посмотрел доку и сразу резко отвратила от использования необходимость постоянно писать array( в параметрах… Имхо не зря писали про func_get_args()

Оставить комментарий:

You must be logged in to post a comment.

© 2007-2010 Блог интернет-разработчика, автор — Zhilinsky.ru.
При использовании информации ссылка на источник обязательна.