2010-11-28 11 views
7

Ich bin eine kleine Bibliothek Active Schaffung PDO mit und ich plane MySQL, Sqlite und PgSQL zu unterstützen.Syntax Unterschiede zwischen MySQL, SQLite und pgsql

Meine Frage ist, wie kann ich sicher sein, dass die Abfragezeichenfolge mit allen Adaptern funktioniert? Es wird meistens CRUD-Statements mit einigen Joins usw. geben. Gibt es einen Standard, dem ich folgen kann, der für all diese funktioniert?

Dank /Tobias

EDIT: Vielen Dank für Ihre Antworten, aber meine Frage mehr über die 'Syntax' Unterschiede zwischen ihnen SQL war.

+0

sicher. Du kannst immer die Möglichkeit haben, deine Hände hochzubinden und aus dem mächtigen Postgre einen erbärmlichen Sqlite zu machen. –

+1

Das Problem mit dieser Art von Ansatz ist, dass die resultierende Anwendung wird auf allen Plattformen gleichermaßen langsam laufen - vor allem, wenn es eine nicht-triviale Anwendung ist. Ich würde eher versuchen, die Abstraktion auf der Business-Schicht zu tun und DBMS-spezifische Funktionen auszunutzen, wo immer Sie in der Datenzugriffsschicht können. –

+0

@a_horse_with_no_name: Für solche Sachen würde ich immer antworten, zeigen Sie mir ein Performance-Problem, dann würde ich wechseln, um regelmäßige Abfrage auszuführen. Die Sorge wegen der Performance wegen der Datenbankabstraktionsschicht scheint mir eine vorzeitige Optimierung zu sein; und selbst wenn ich eine Abstraktionsschicht verwende, habe ich immer die Möglichkeit, reguläre Abfragen auszuführen. –

Antwort

0

Here Sie eine einfache Einführung müssen Zend_Db_Adapter - ich glaube, Sie wollen etwas ähnliches (ich gepostet nur als Beispiel zu sehen, wie andere das Problem lösen Sie haben)

0

Meine Wahl für diese Art von Fragen wäre ADOdb. Obwohl ich es nie mit PostgreSQL verwendet habe, habe ich meine geistige Gesundheit in einem Projekt gerettet, das zufällig mit MySQL erstellt wurde und dann zu SQL Server, SQLite und zurück zu SQL Server migriert wurde.

2

Wenn Sie Ihre eigene DB-Schicht zu schreiben, würde ich Ihnen vorschlagen:

  1. Verwenden Platzhalter, wenn Sie nicht bereits sind. Sie fügen auch Sicherheit hinzu.
  2. Verwendung bindParam/bindValue mit dem Werttyp (zB Boolesche Werte nicht in SQLite existieren aber funktionieren, wenn mit PARAM_BOOL gebunden) ...
  3. Verwendung von gespeicherten Prozeduren von MySQL, erstellen Namen in PostgreSQL übereinstimmt, und definieren sie in SQLite mit sqliteCreateAggregate/sqliteCreateFunction.
  4. Alle Parameterprüfung in PHP durchführen, weil SQLite nichts tut (z. B. Datumsvariablen validieren) ...
  5. Verwenden Sie InnoDB für MySQL, um Transaktionen zu erhalten.

Hinweis: diese sehr unterschiedlichen RDBMs Durch die Unterstützung, werden Sie die Datenbank nur einen Datenspeicher zu degradieren. Beachten Sie, dass SQLite sehr begrenzt ist. Es hat keine nativen Datentypen außer Nummer/String. Z.B. es fehlen Datum Umgang und Intervalle und so weiter. Alle drei Datenbanken unterstützen Transaktionen, die für die Datenintegrität wesentlich sind, wenn die Integrität außerhalb der Datenbank aufrechterhalten wird.

Edit: Die Erwähnung der MySQL-Trigger, die für 5.0 verfügbar sind entfernt.

+0

So viel wie ich Postgres bevorzuge: MySQL ** hat ** Trigger.Aber Fremdschlüssel sind viel besser geeignet, um die Datenintegrität zu gewährleisten. –

Verwandte Themen