检查有效的 SQL 列名称

2022-08-30 14:37:22

如何在php中检查字符串是否是sql语句的有效兼容列名?只是一个字符串匹配。


答案 1

最终,每个字符串一旦用双引号括起来就是有效的列名(MySQL可能不遵守该规则,具体取决于配置。在默认安装中,它不使用双引号作为标识符引号)。

但是,如果您希望跨平台(如不同的DBMS标记所建议的那样),则应检查最小公分母。

PostgreSQL手册对此有一个很好的定义

SQL 标识符和关键字必须以字母(a-z,但也包括带有变音符号和非拉丁字母的字母)或下划线 (_) 开头。标识符或关键字中的后续字符可以是字母、下划线、数字 (0-9) 或美元符号 ($)。请注意,根据SQL标准的字母,标识符中不允许使用美元符号,因此使用它们可能会使应用程序的可移植性降低

因此,您应该使用正则表达式检查以下内容:

  • 以字母开头
  • 仅包含字符(字母)和数字以及下划线

因此,如下所示的正则表达式应涵盖以下内容:

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

由于SQL不区分大小写(除非使用双引号),因此允许使用大写和小写字母。


答案 2

您可以按如下方式使用 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";
}

推荐