2010-05-14 3 views
2

Различные базы данных имеют небольшие различия в их реализации SQL. Означает ли PDO это?Является ли SQL, используемым базой данных PDO независимой?

Если я напишу SQL-запрос, который я использую с PDO для доступа к базе данных MySQL, а затем сообщите PDO, чтобы начать использовать другой тип базы данных, будет ли запрос прекращать работу? Или PDO «преобразует» запрос так, чтобы он продолжал работать?

Если PDO этого не делает, существуют ли библиотеки PHP, которые позволяют мне писать SQL в соответствии с конкретным синтаксисом, а затем библиотека будет обрабатывать преобразование SQL так, чтобы оно выполнялось в разных базах данных?

ответ

3

От PHP инструкции:

PDO обеспечивает доступ к данным абстракции слой, а это значит, что, независимо от того, какой базы данных вы используете, вы используете те же функцию, выдавать запросы и выборки данные. PDO не предоставляет абстракцию базы данных ; это не переписать SQL или эмулировать отсутствующие функции. Вы должны использовать полноценный уровень абстракции , если вам нужен .

Таким образом, вы не можете изменить базу данных и ожидать, что все будет работать по-прежнему. Это зависит от запросов, которые вы использовали. Являются ли они «простыми» запросами SQL92 или используют специальные функции для конкретного db ...

Ex mysql-запрос с «LIMIT 10,20» должен быть переписан для работы с Oracle DB или Sqlite. Они используют «LIMIT 20 OFFSET 10»

+0

И что-то совершенно другое на MSSQL. –

+0

Я взглянул на руководство, но ничего не нашел; ясно, что вы более наблюдательны, чем я! –

2

У PHP нет библиотек, которые автоматически преобразуют SQL для вас. Если вам нужна такая функциональность, вы должны взглянуть на реализацию ORM, такую ​​как Doctrine. Конечно, есть цена, потому что есть кривая обучения, связанная с ее использованием в вашем проекте, а также отписание SQL прекращает быть таким же простым, как выключение строки. Вы должны спросить себя, действительно ли вам абсолютно необходим код, независимый от базы данных.

+0

К сожалению, нет необходимости писать код, независимый от базы данных. Однако, спасибо за рекомендацию. Я посмотрел на ORM, и они на самом деле не то, что я хочу, но вы просто дали мне идею взглянуть на их источник и посмотреть, как они генерируют запросы и сами пытаются реализовать что-то. –

+1

Существует также что-то вроде MDB2: в основном SQL, но, например, пара функций PHP вызывает вместо кода «limit». – Narcissus

+0

@Narcissus: Спасибо! Сейчас я читаю документацию, и пока это похоже на то, что мне нужно. –

Смежные вопросы