Стандартният 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.