问题 PHP MySQL SQL解析器(INSERT和UPDATE)


我希望在PHP中解析INSERT和UPDATE MySQL SQL查询,以确定从原始数据中做出哪些更改。现在这很容易创建,但我想看看PHP中是否有任何现有的库来执行此操作。

基本上我所拥有的是一个包含已在数据库上运行的所有上述查询的表。我已经分离出了表名和查询类型。我希望根据这些数据为用户查看创建一个完整的更改日志,因此我需要获取原始INSERT的值,然后在每个UPDATE中进行更改。最后我需要字段名称和新值以及记录ID。我会做其余的检查/美化,包括人类可读的列名,以及字段值是否实际没有改变。

目前,我可能不需要做多个表UPDATE,但它会很有用。

有哪些图书馆可以做到这一点?


4180
2017-11-12 04:54


起源



答案:


http://pear.php.net/package/SQL_Parser

http://sourceforge.net/projects/txtsql

http://code.google.com/p/php-sql-parser

对于Perl来说,有更多种类


5
2017-11-12 05:20



PEAR包很绿,甚至不是v1.0。 - Lucas Pottersky
您的第二个链接似乎不再有效。 - mellamokb
@mellamokb:固定 - Vinko Vrsalovic
好像 code.google.com/p/php-sql-parser 已被转移到 github.com/greenlion/PHP-SQL-Parser (它是我迄今为止尝试过的最快的解析器,但返回的是低级树,而不是像select,insert等类类型) - Zack Morris


答案:


http://pear.php.net/package/SQL_Parser

http://sourceforge.net/projects/txtsql

http://code.google.com/p/php-sql-parser

对于Perl来说,有更多种类


5
2017-11-12 05:20



PEAR包很绿,甚至不是v1.0。 - Lucas Pottersky
您的第二个链接似乎不再有效。 - mellamokb
@mellamokb:固定 - Vinko Vrsalovic
好像 code.google.com/p/php-sql-parser 已被转移到 github.com/greenlion/PHP-SQL-Parser (它是我迄今为止尝试过的最快的解析器,但返回的是低级树,而不是像select,insert等类类型) - Zack Morris


有点问题,但也许值得考虑的建议:

从MySQL 5.0开始,对触发器的支持非常好。如果要记录对数据库所做的更改,而不是存储sql语句,还可以定义插入/更新触发器并定义另一个可以存储这些值的表。例如,您可以创建一个包含字段的简单表

timestamp, user, field, old_value, new_value

并且只要在其中一个监视的表上发生DML,就插入相应的值。 为了进一步简化这一点,您可以添加该字段

table

到“跟踪表”,将所有观察表的所有更改存储在一个地方。

MySQL手册 有关此主题的更多信息。


3
2018-01-05 21:59





你可以给它一个机会: SQL解析和编译


2
2018-04-09 15:58





Facebook发布了他们的开源PHP版本 FQL解析器。从我的意思是它是非常整洁的代码。您可能会破解使用常规SQL。


1
2017-11-13 13:27



我找不到你提到的包裹。你能提供更精彩的链接吗? - Darryl Hein


你可以试试 : dqml2tree sql(dql和dml)用php编写的查询解析器


1
2018-01-25 00:09





简而言之,我发现PEAR:SQL_Parser包提供了最干净的短期解决方案,而PEAR:PHP_Parser_Generator包(FSQL使用的生成器)看起来像是一个非常强大的长期解决方案。

我发现txtSQL不够健壮,并且不能很好地解析SQL以保证使用,至少在我看来。


1
2018-01-05 17:40



您似乎已经用随机图片替换了您的博客。该 打开错误 在PEAR SQL解析器让我担心。听起来他们已经构建了一个通用的SQL解析器而没有特别关注MySQL。 - mpen