PHP:使用 REGEX 从任何查询中获取表名(选择、更新、插入、删除)

标签 php postgresql

考虑这三个 sql 语句:

SELECT * FROM Users;

DELETE FROM Users WHERE id =1;

UPDATE Users SET name='test' WHERE id= 1;

现在我不太擅长 REGEX,但我想从 postgres 查询中获取表名。有人可以为我创建一个并稍微解释一下吗。

谢谢,

最佳答案

对于那些简单的查询,以下内容就足够了。但是,请注意,当存在子查询或 UPDATE 语句不以单词 UPDATE 开头时(例如 header 中有注释或 UPDATE 是 CTE 的一部分的情况),它将不起作用。

WITH stmts(_sql) AS (values ('SELECT * FROM Users1;'::text), ('DELETE FROM Users2 WHERE id =1;'), ('UPDATE Users3 SET name=''test'' WHERE id= 1;'))
SELECT _sql, (regexp_matches(_sql, CASE WHEN _sql ~* '^\s*update' THEN '^\s*update' ELSE 'from' END||'\s+([^\s;]+)', 'im'))[1]
FROM stmts

Tablename 是从作为第一条语句的 UPDATE 之后的内容中获得的,或者是在第一条 FROM 语句之后立即获得的。匹配不区分大小写 (i) 和多行匹配 (m)。

关于PHP:使用 REGEX 从任何查询中获取表名(选择、更新、插入、删除),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38177162/

相关文章:

通过 cron 运行时的 PHP 系统命令

php - Laravel 5.8 使用子域作为 domain.com/api 旁边的 API 端点

php - 用户身份验证 - 错误登录

java - MySQL 到 PostgreSQL 迁移 : mysql connector

postgresql - 从Postgres数据库导入表到HDFS时出现错误?

android应用离线模式,本地sqlite数据库同步远程数据库

PHP 加速器和静态字段

php - 将 Laravel 应用程序连接到 Android

postgresql - Docker文件等待postgres容器

html - 显示网页中突出显示的记录的匹配列