Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Uciekanie nazw kolumn w wyciągach PDO

Standardowy sposób ANSI wykonywania rozdzielanego identyfikatora to:

SELECT "field1" ...

a jeśli w nazwie jest ", podwój je:

SELECT "some""thing" ...

Niestety nie działa to w MySQL z ustawieniami domyślnymi, ponieważ MySQL woli myśleć, że podwójne cudzysłowy są alternatywą dla pojedynczych cudzysłowów dla literałów łańcuchowych. W takim przypadku musisz użyć backticków (jak opisuje Björn) i ukośnika odwrotnego.

Aby poprawnie wykonać ucieczki odwrotnym ukośnikiem, musisz potrzebujesz mysql_real_escape_string, ponieważ jest zależny od zestawu znaków. Ale kwestia jest dyskusyjna, ponieważ ani mysql_real_escape_string ani addslashes nie uciekają przed znakiem tylnego cudzysłowu . Jeśli możesz być pewien, że w nazwach kolumn nigdy nie będzie znaków spoza zestawu ASCII, możesz uniknąć ręcznej zmiany ukośnika odwrotnego na znaki ` i \.

Tak czy inaczej, nie jest to zgodne z innymi bazami danych. Możesz powiedzieć MySQL, aby zezwolił na składnię ANSI, ustawiając opcję konfiguracyjną ANSI_QUOTES. Podobnie SQL Server domyślnie dławi się podwójnymi cudzysłowami; używa jeszcze innej składni, a mianowicie nawiasów kwadratowych. Ponownie możesz skonfigurować go tak, aby obsługiwał składnię ANSI z opcją „quoted_identifier”.

Podsumowanie:jeśli potrzebujesz tylko kompatybilności z MySQL:

a. używaj odwrotnych cudzysłowów i nie zezwalaj na odwrotne cudzysłowy, odwrotny ukośnik i znak nul w nazwach, ponieważ ich unikanie jest niewiarygodne

Jeśli potrzebujesz kompatybilności z różnymi systemami DBMS, możesz:

b. używaj podwójnych cudzysłowów i wymagaj od użytkowników MySQL/SQL-Server odpowiedniej zmiany konfiguracji. Nie zezwalaj na znaki podwójnego cudzysłowu w nazwie (ponieważ Oracle nie może sobie z nimi poradzić). Lub

c. mieć ustawienie dla MySQL vs SQL Server vs inne i w zależności od tego utworzyć albo odwrotny cudzysłów, nawias kwadratowy lub składnię podwójnego cudzysłowu. Nie zezwalaj na podwójne cudzysłowy i odwrotny ukośnik/odwrotny cytat/nul.

Jest to coś, do czego można by mieć nadzieję, że warstwa dostępu do danych będzie miała funkcję, ale PDO nie.

Podsumowanie podsumowania:problemem są dowolne nazwy kolumn, których najlepiej unikać, jeśli możesz im pomóc.

Podsumowanie podsumowania podsumowania:gnnnnnnnnnnnh.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nieprawidłowy plik klucza dla tabeli '/tmp/#sql_3c51_0.MYI' spróbuj go naprawić

  2. C# Zbyt wiele połączeń w MySQL

  3. Jak automatycznie aktualizować dane w bazie danych w PHP

  4. Błąd interfejsu (0, '')

  5. wybierz kolumnę jako prawda / fałsz, jeśli id ​​istnieje w innej tabeli