Как вы можете проверить 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, либо укажите запрос. и чем подтверждать результат.
Если бы у меня был тот же вопрос, я бы поискал конкретную документацию по базам данных для определенного списка символов, а затем реализовал его в виде регулярного выражения.
Но я никогда не столкнулся бы с таким вопросом, потому что основные латинские символы, цифры и подчеркивание более чем достаточно, чтобы назвать любое поле, которое я использую. Поэтому я бы сохранил большую мобильность и удобство обслуживания.