Mysql
 sql >> база данни >  >> RDS >> Mysql

Екраниране на имена на колони в PDO изрази

Стандартният ANSI начин за създаване на разделен идентификатор е:

SELECT "field1" ...

и ако има " в името, удвоете го:

SELECT "some""thing" ...

За съжаление това не работи в MySQL с настройките по подразбиране, защото MySQL предпочита да мисли, че двойните кавички са алтернатива на единичните кавички за низови литерали. В този случай трябва да използвате обратни отметки (както е описано от Björn) и избягване на обратна наклонена черта.

За да направите правилно екраниране на обратна наклонена черта, ще нужда от mysql_real_escape_string, защото зависи от набора от символи. Но въпросът е спорен, тъй като нито mysql_real_escape_string, нито addslashes избягват символа за обратна кавичка . Ако можете да сте сигурни, че никога няма да има знаци, различни от ASCII, в имената на колоните, можете да се разминете само с ръчно избягване на обратна наклонена черта на символите ` и \.

Така или иначе, това не е съвместимо с други бази данни. Можете да кажете на MySQL да разреши ANSI синтаксиса, като зададете конфигурационната опция ANSI_QUOTES. По същия начин SQL Server също се задавя с двойни кавички по подразбиране; той използва още един синтаксис, а именно квадратни скоби. Отново можете да го конфигурирате да поддържа синтаксиса на ANSI с опцията ‘quoted_identifier’.

Резюме:ако имате нужда само от MySQL съвместимост:

а. използвайте обратни кавички и забранете обратните кавички, обратната наклонена черта и нулевите символи в имената, защото избягването им е ненадеждно

Ако имате нужда от съвместимост между СУБД, или:

б. използвайте двойни кавички и изисквайте от потребителите на MySQL/SQL-Server да променят конфигурацията по подходящ начин. Забранете знаците с двойни кавички в името (тъй като Oracle не може да се справи с тях дори с екранизирани). Или,

° С. имат настройка за MySQL срещу SQL Server срещу други и произвеждат синтаксис на обратни кавички, квадратни скоби или двойни кавички в зависимост от това. Забранете както двойни кавички, така и обратна наклонена черта/обратна кавичка/нула.

Това е нещо, за което се надявате слоят за достъп до данни да има функция, но PDO не го прави.

Резюме на резюмето:произволните имена на колони са проблем, най-добре е да се избягва, ако можете да му помогнете.

Резюме на резюмето на резюмето: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. как автоматично да вмъквам препратки към външни ключове в таблици в mysql или JDBC?

  2. Последователи/следваща структура на базата данни

  3. Вътрешна грешка на Django 500 на сървъра - неправилно конфигурирана:Грешка при зареждане на модула MySQLdb:

  4. Как да създадете обобщена таблица в MySQL

  5. Целочисленото поле на MySQL се връща като низ в PHP