Проверить правильность имени столбца SQL

Как вы можете проверить php, что строка является допустимым именем совместимого столбца для оператора sql? просто совпадение строк.

В конечном итоге каждая строка является допустимым именем столбца, когда она заключена в двойные кавычки (MySQL может не подчиняться этому правилу в зависимости от конфигурации. Он не использует двойные кавычки в качестве котировок идентификатора при установке по умолчанию).

Однако, если вы хотите быть кросс-платформой (как предлагают различные теги СУБД), вы должны проверить наименьший общий знаменатель.

В руководстве PostgreSQL есть хорошее определение :

Идентификаторы SQL и ключевые слова должны начинаться с буквы (az, а также букв с диакритическими знаками и нелатинских букв) или подчеркивания (_). Последующие символы в идентификаторе или ключевом слове могут быть буквами, символами подчеркивания, цифрами (0-9) или знаками доллара ($). Обратите внимание, что знаки доллара запрещены в идентификаторах в соответствии с буквой стандарта SQL, поэтому их использование может сделать приложения менее переносимыми

Поэтому вы должны проверить следующее с помощью регулярного выражения:

  • начинается с письма
  • содержит только символы (буквы) и цифры и символ подчеркивания

Поэтому регулярное выражение, подобное приведенному ниже, должно охватывать следующее:

^[a-zA-Z_][a-zA-Z0-9_]*$

Поскольку SQL не чувствителен к регистру (если не используются двойные кавычки), допустимы буквы верхнего и нижнего регистра.

Вы можете использовать запрос MySQL следующим образом, чтобы получить поля из определенной таблицы:

 SHOW FIELDS FROM tbl_name 

а затем некоторые простые PHP:

 $string_to_check = 'sample'; $valid = false; $q = mysql_query("SHOW FIELDS FROM tbl_name"); while($row = mysql_fetch_object($q)) { if($row->Field == $string_to_check) { $valid = true; break; } } if($valid) { echo "Field exists"; } 

использование

Либо используйте столбцы show, либо укажите запрос. и чем подтверждать результат.

Если бы у меня был тот же вопрос, я бы поискал конкретную документацию по базам данных для определенного списка символов, а затем реализовал его в виде регулярного выражения.

Но я никогда не столкнулся бы с таким вопросом, потому что основные латинские символы, цифры и подчеркивание более чем достаточно, чтобы назвать любое поле, которое я использую. Поэтому я бы сохранил большую мобильность и удобство обслуживания.