Проверьте правильность имени столбца SQL - PullRequest
27 голосов
/ 12 февраля 2011

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

Ответы [ 4 ]

39 голосов
/ 12 февраля 2011

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

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

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

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

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

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

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

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

1 голос
/ 12 февраля 2011

Вы можете использовать запрос 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";
}
0 голосов
/ 12 февраля 2011

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

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

0 голосов
/ 12 февраля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...