Стандартный способ ANSI для создания идентификатора с разделителями:
SELECT "field1" ...
и если в имени есть ", удвойте его:
SELECT "some""thing" ...
К сожалению, это не работает в MySQL с настройками по умолчанию, потому что MySQL предпочитает думать, что двойные кавычки являются альтернативой одинарным кавычкам для строковых литералов. В этом случае вы должны использовать обратные черты (как обрисовано в общих чертах Бьёрном) и экранирование от обратной косой черты.
Для правильного экранирования обратной косой черты вам понадобится mysql_real_escape_string, поскольку она зависит от набора символов. Но суть спорная, потому что ни mysql_real_escape_string, ни аддеш-черты не экранируют символ обратной цитаты . Если вы можете быть уверены, что в именах столбцов никогда не будет символов, отличных от ASCII, вы можете обойтись, просто используя обратную косую черту и символы `и \.
В любом случае, это не совместимо с другими базами данных. Вы можете указать MySQL разрешить синтаксис ANSI, установив параметр конфигурации ANSI_QUOTES. Точно так же SQL Server по умолчанию подавляется двойными кавычками; он использует еще один синтаксис, а именно квадратные скобки. Опять же, вы можете настроить его для поддержки синтаксиса ANSI с параметром «quoted_identifier».
Резюме: если вам нужна только совместимость с MySQL:
а. используйте обратные кавычки и запрещайте их использовать в именах, так как экранирование ненадежно
Если вам нужна кросс-СУБД совместимость, либо:
б. используйте двойные кавычки и требуйте от пользователей MySQL / SQL-сервера соответствующего изменения конфигурации. Запрещать символы двойных кавычек в имени (так как Oracle не может их обработать даже без экранирования). Или
с. иметь настройку для MySQL против SQL Server против других, и в зависимости от этого вывести синтаксис обратной кавычки, квадратной скобки или двойной кавычки. Запретить как двойные кавычки, так и обратную косую черту / обратную цитату / нуль.
Это то, на что вы надеетесь, что уровень доступа к данным будет иметь функцию, но PDO нет.
Сводка резюме: произвольные имена столбцов являются проблемой, лучше избегать, если вы можете помочь ей.
Краткое содержание резюме: gnnnnnnnnnnnh.