Синтаксические различия между mysql, sqlite и pgsql - PullRequest
7 голосов
/ 28 ноября 2010

Я создаю крошечную библиотеку activerecord с использованием PDO и планирую поддерживать MySQL , Sqlite и PgSQL .

У меня вопрос, как я могу быть уверен, что строка запроса работает со всеми адаптерами?В основном это будут операторы CRUD с некоторыми объединениями и т. Д. Есть ли какой-то стандарт, которому я могу следовать, который работает для всех этих?все ваши ответы, но мой вопрос был больше о различиях SQL * синтаксиса между ними.

Ответы [ 3 ]

2 голосов
/ 29 ноября 2010

Если вы хотите написать свой собственный слой БД, я бы предложил вам:

  1. Используйте заполнители, если вы этого еще не сделали. Они также добавляют безопасность.
  2. Использование bindParam / bindValue с типом значения (например, BOOLEANS не существует в SQLite, но работает, если связано с PARAM_BOOL) ...
  3. Используйте хранимые процедуры из MySQL, создайте совпадающие имена в PostgreSQL и определите их в SQLite с помощью sqliteCreateAggregate / sqliteCreateFunction.
  4. Выполните все проверки параметров в PHP, потому что SQLite не будет делать никаких (например, проверять переменные даты) ...
  5. Используйте InnoDB для MySQL для получения транзакций.

Примечание: Поддерживая эти совершенно разные RDBM, вы превращаете базу данных в просто хранилище данных. Имейте в виду, что SQLite очень ограничен. У него нет собственных типов данных, сохраняемых из числа / строки. Например. не хватает обработки дат и интервалов, и так далее. Все три базы данных поддерживают транзакции, которые важны для целостности данных, когда целостность поддерживается вне БД.

Редактировать: Удалено упоминание о триггерах MySQL, которые доступны для 5.0.

0 голосов
/ 28 ноября 2010

Мой выбор для такого рода вопросов будет ADOdb . Хотя я никогда не использовал его с PostgreSQL, он просто сохранил мою работоспособность в проекте, который родился с MySQL, а затем перенесен на SQL Server, SQLite и обратно на SQL Server.

0 голосов
/ 28 ноября 2010

Здесь у вас есть простое введение в zend_db_adapter - я думаю, вы хотите что-то подобное (я опубликовал это просто в качестве примера, чтобы увидеть, как другие решают вашу проблему)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...