检查有效的SQL列名称

Tim*_*nen 27 php mysql sqlite postgresql

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

a_h*_*ame 40

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

但是,如果您想要跨平台(如不同的DBMS标记所示),您应该检查最小公分母.

PostgreSQL的手册有一个很好的定义的这样的:

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

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

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

所以像下面这样的正则表达式应该涵盖这个:

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

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

  • @Smudge:非带引号的标识符不允许使用unicode字符.一旦使用带引号的标识符,就不需要正则表达式,因为引用名称时允许任何内容. (2认同)