2010-03-03 8 views
5
  1. Obecnie pracuję nad aplikacji PHP, który wykorzystuje bazę danych MySQL dla swojego zaplecza
  2. Wszystkie moje pytania zawierają odwrócone, pojedyncze apostrofy uciec nazwy pól. To jest tak, że mogę mieć pola takie jak "hasło" w zapytaniu bez powodowania problemów (patrz przykład).
  3. Wiem, że backticks nie są uniwersalne między silnikami baz relacyjnych (SQLite używa podwójnego cudzysłowu, na przykład)
  4. Wszystkie zapytania w mojej aplikacji php są wykonywane przy użyciu interfejsu PHP PDO

Moje pytanie brzmi: jeśli chcę przełączyć silniki baz danych, np. Z MySQL na SQLite, co muszę zrobić, aby obsłużyć backticks w wszystkie moje pytania? Naprawdę nie chcę, aby przejść przez cały mój kod i zmienić/usunąć backticks. Jakieś sugestie? Czy robię coś złego, czy nie w granicach najlepszych praktyk?Handling MySQL backticks Podczas przełączania silników DB przy użyciu interfejsu PDO PHP

Zapytanie Przykład:

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

Odpowiedz

4

Właściwie password naprawdę nie muszą być notowane ... to nie jest nawet słowem zarezerwowanym: http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html

IMHO, najlepszym sposobem można zrobić to:

  1. nie używaj słów zastrzeżonych w swoich identyfikatorów.
  2. Usuń cytaty z bieżącego kodu; to 2-minutowe zadanie z dowolnym przyzwoitym edytorem (chyba, że ​​używasz też operatora backtick)

Niezależnie od tego przejście na inny silnik DB to jedno; budowanie aplikacji niezależnej od DB jest zupełnie inną kwestią.

+0

To dobra rada i co będę robić od teraz. –

4

Nie używaj słów zastrzeżonych i nie wpaść w kłopoty, gdy użytkownik nie korzysta odwrócone, pojedyncze apostrofy. Pozbądź się wszystkich backticków, to nie jest SQL Standard, wszystkie inne bazy danych będą miały z nimi problemy. Podwójne cytaty są używane w standardzie, większość baz danych obsługuje je. Ale ponownie, nie używaj zrezygnowanych słów i nie potrzebujesz ich.

Konfiguracja serwera MySQL (-przyłączeniem) używać ANSI-QUOTES i MySQL będzie również leczyć cudzysłowia, jak powinien zrobić w pierwszej kolejności: jako identyfikator

+3

Czy uważa się za "złą praktykę" używanie zastrzeżonych słów jako nazw pól? Powodem, dla którego używam "password" jako nazwy pola jest to, że jest to najjaśniejszy i najbardziej zwięzły opis tego, co zawiera to pole. Robię to samo z innymi polami, takimi jak daty (użyłem "created_at" vs "date_time_created"). Jestem otwarty na sugestie/poprawki. Każda rada jest doceniana. –

+2

Unikanie słów zarezerwowanych jest niepraktyczne. Właśnie zacząłem grać z tabelą na sqlite3, która ma kolumnę o nazwie "release" i nie było problemu. Kiedy spróbowałem tego samego na mysql, aby sprawdzić coś, miał problem z tym, prawdopodobnie dlatego, że jest to słowo zarezerwowane. Mógłbym oczywiście zmienić nazwę, ale gdybym nie próbował na mysql, nie wiedziałbym w ogóle. – haridsv

+0

RELEASE jest również słowem kluczowym w SQLite: http://www.sqlite.org/lang_keywords.html Znajduje się na liście słów kluczowych SQL: 2008. –

1

W rzeczywistości SQLite jest zgodny z stylem cytowania MySQL.

Odwrotność jest jednak prawidłowa tylko wtedy, gdy postępujemy zgodnie z poradą @Frank.

Powiązane problemy