2010-03-03 3 views
5
  1. ich zur Zeit auf einer PHP-Anwendung arbeiten, die eine MySQL-Datenbank für seinen Backend enthalten
  2. All meine Abfragen verwenden Backticks die Feldnamen zu entkommen. Dies ist so, dass ich Felder wie "password" in einer Abfrage haben kann, ohne Probleme zu verursachen (siehe Beispiel)
  3. Ich weiß, dass Backticks zwischen relationalen Datenbank-Engines nicht universal sind (SQLite verwendet zum Beispiel ein double-quote)
  4. alle Queries in meinem PHP-Anwendung
  5. PHP PDO-Schnittstelle ausgeführt unter Verwendung von

Meine Frage ist: Wenn ich Datenbank-Engines wechseln wollen, sagen wir von MySQL zu SQLite, was ich die Backticks zu behandeln tun müssen, um in alle meine Fragen? Ich möchte wirklich nicht meinen gesamten Code durchgehen und die Backticks ändern/entfernen. Irgendwelche Vorschläge? Mache ich etwas falsch oder nicht innerhalb der Grenzen von Best Practices?MySQL Backticks Handhabung Wenn PHP PDO-Schnittstelle DB Schaltmotoren mit

Beispielabfrage:

SELECT 
    `username`, 
    `password`, 
    `email_address` 
FROM 
    `users` 
WHERE 
    `id` = '1' 

Antwort

4

Eigentlich ist password nicht wirklich zitiert werden müssen, ... Es ist nicht einmal ein reserviertes Wort: http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html

IMHO, ist der beste Ansatz, den Sie machen können, ist:

  1. Sie reservierte Wörter nicht in Ihre Bezeichner verwenden.
  2. Zitate aus dem aktuellen Code entfernen; es ist nur 2 Minuten Aufgabe mit jedem anständigen Editor

Wie auch immer, die Umstellung auf einem anderen DB-Engine ist eine Sache (es sei denn, Sie auch den Graviszeichen Operator); Eine DB-unabhängige App zu erstellen, ist ein ganz anderes Thema.

+0

Das ist ein guter Rat und was ich von jetzt an machen werde. –

4

nicht reservierten Wörter verwenden Sie und bekommt man nicht in Schwierigkeiten, wenn Sie nicht verwenden Backticks. Entfernen Sie alle Backticks, es ist nicht SQL Standard, alle anderen Datenbanken haben Probleme damit. Im Standard werden doppelte Anführungszeichen verwendet, die meisten Datenbanken unterstützen sie. Aber wieder, benutze keine reservierten Wörter und du brauchst sie nicht.

Konfigurieren Sie Ihren MySQL-Server (-Anschluss) ANSI-QUOTES zu verwenden und MySQL wird auch doppelte Anführungszeichen behandeln, wie es in erster Linie getan haben sollte: als Kennung

+3

Wird es als "schlechte Praxis" angesehen, reservierte Wörter als Feldnamen zu verwenden? Der Grund, warum ich 'password' als Feldnamen verwende, ist, weil es die klarste und prägnanteste Beschreibung dessen ist, was dieses Feld enthält. Ich mache dasselbe mit meinen anderen Feldern wie Daten (ich habe 'created_at' vs 'date_time_created' verwendet). Ich bin offen für Vorschläge/Korrekturen. Jeder Rat wird geschätzt. –

+2

Die Vermeidung reservierter Wörter ist nicht praktikabel. Ich habe gerade angefangen, mit einer Tabelle auf sqlite3 zu spielen, die die Spalte namens "release" hat und es hatte kein Problem. Als ich das gleiche auf mysql versuchte, etwas zu überprüfen, hatte es ein Problem damit, wahrscheinlich weil es ein reserviertes Wort ist. Ich könnte sicherlich den Namen ändern, aber wenn ich nicht auf mysql versucht hätte, hätte ich es überhaupt nicht gewusst. – haridsv

+0

RELEASE ist auch ein Schlüsselwort in SQLite: http://www.sqlite.org/lang_keywords.html Es befindet sich in der SQL: 2008-Liste der Schlüsselwörter. –

1

Eigentlich ist SQLite kompatibel mit MySQL Backtick Quoting-Stil.

Die Umkehrung ist jedoch nur wahr, wenn Sie dem Ratschlag @Frank folgen.