LINUX.ORG.RU

[PHP]Слой абстракции от БД

 


0

0

Есть какий-нибудь сабж, который поддерживает MySQL и PostgreSQL, чтоб без лишних заморочей и нормально поддерживал last insert id? Хотел выдернуть из Друпала, но оно там использует какие-то свои внутренние функции, поковыряться, конечно, можно, но пока лень

anonymous
Ответ на: комментарий от anonymous_num_0

>Обращаю особое внимание на то, что DbSimple намеренно не занимается «выравниваниием диалектов» SQL в различных СУБД (что частично пытаются делать PEAR DB и ADOdb). Она лишь позволяет обращаться к ним через единый стандартизированный и очень удобный интерфейс. Что такое «выравнивание диалектов»? Например, в MySQL запрос с ограничением выглядит как "SELECT ... LIMIT m, n", в PostgreSQL — как "SELECT ... OFFSET x LIMIT y", а в FireBird — "SELECT FIRST a SKIP b ...". Это и есть «разные диалекты». Вы должны сами решить, какую СУБД используете, и соответствующим образом составлять запросы; DbSimple вам в этом не поможет (по крайней мере, это не тот слой абстракции, на котором осуществляется выравнивание диалектов).

:(

А ADO - это не то, во что мутировало PDO?

anonymous
()
Ответ на: комментарий от anonymous

> А ADO - это не то, во что мутировало PDO?

Я не понял, так вы ORM хотите? Вот, самая популярная: http://www.doctrine-project.org/

Там внутри извращение по типу:

xxxfasdf()->where("some")->limit(xx)

А вообще читайте про MVC. Особенно про M. На пальцах - запросы к базе в отдельный файл. Тогда перенос будет менее безболезненный.

Ещё сейчас моден:

http://pear.php.net/package/MDB2/

Я его сильно не ковырял. Но вроде limit там был. Да и PEAR модуль это более надежно и глобально.

Про zend не знаю ничего.

anonymous_num_0
()
Ответ на: комментарий от anonymous_num_0

>xxxfasdf()->where("some")->limit(xx)

OH SHI--

нет, то, что я хотел, должно было избавить меня от необходимости шарить с выпученными глазами по коду в момент переезда и менять "mysql_" на "pg_", а также сгладить всякие мелочи типа того же LIMIT'а, потому что делать собирался маскимально переносимо, по возможности на чистом SQL , без оптимизаций под конкретную СУБД. А когда ado.inc.php весит 120 Кб, мне становится не по себе от такой переносимости

anonymous
()
Ответ на: комментарий от anonymous

> избавить меня от необходимости шарить с выпученными глазами по коду в момент переезда и менять "mysql_" на "pg_"

PDO. Править надо будет только DSN (а его можно и нужно указывать в конфиге а не в коде!)

> сгладить всякие мелочи типа того же LIMIT

Не выйдет - или просто научитесь писать код в рамках стандарта.

no-dashi ★★★★★
()

Рекомендую Zend_Db. Может использовать довольно много различных адаптеров, при этом оставаясь довольно независимым от БД. По крайней мере у меня проблем не возникало. ORM не самый удобный, но не надо париться с настройками как у Propel.

BobiKK
()
Ответ на: комментарий от anonymous

есть несколько уровней абстракции от бд: 1. от библиотеки драйвера бд (т.е. от mysql, mysqli, pdo, pg_, ..); 2. от диалекта sql (есть работающие на уровне текста sql запроса, типа ado; есть sql-билдеры (объектно-ориентированные заставляют описывать запросы в стиле xxxfasdf()->where("some")->limit(xx)); 3. от типа бд (всевозможные orm).

http://ezcomponents.org/docs/tutorials/Database

Lucky ★★
()
Ответ на: комментарий от Lucky

Всем большое спасибо за ответы!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.