如何在php中判断字符串是否是sql语句的有效兼容列名?

推荐答案

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

然而,如果你想跨平台(正如不同的DBMS标签所建议的那样),你应该判断最小公分母.

其中PostgreSQL manual has a nice definition个:

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

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

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

下面这样的正则表达式应该包括:

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

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

Postgresql相关问答推荐

从子查询中的排序结果中获取前X行

在同一 Select 列表中两次使用jsonb_arrayElements()是否安全?

ANTLR4 PostgreSQL语法被 destruct 了吗?

无法在kubernetes中设置postgres复制

如何准确确定边界附近的点和地理的 ST_Intersects(ST_Intersects geography vs. Geometry diffrepancy)

PostgreSQL - 改变数字的精度?

从 PostgreSQL 中的数字获取月份名称

Postgres 中的相似函数与 pg_trgm

IntegrityError:postgres 从转储恢复后,所有具有 ForeignKey 的模型/字段的id列中的空值

Postgres 删除表语法错误

NOT LIKE 带有 NULL 值的行为

PostgreSQL 获取过go 12 小时的元素

大型查询后 psycopg2 泄漏内存

SQL 基本类型:integer vs int?

Postgresql - 更新规则 - 可能有一个最后修改日期,自动更新该行的on update?

按任意时间间隔计算行数的最佳方法

如何为 Postgres psql 设置时区?

PostgreSQL 字符串(255) 限制 - Rails、Ruby 和 Heroku

避免通过 JPA 将null值插入数据库表

PostgreSQL 多种认证方式