11

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

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

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

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

4

6 回答 6

5

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

http://sourceforge.net/projects/txtsql

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

Perl 有更多种类

于 2008-11-12T05:20:14.583 回答
3

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

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

timestamp, user, field, old_value, new_value

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

table

到“跟踪表”以将所有监视表的所有更改存储在一个地方。

有关此主题的更多信息,请参阅MySQL 手册

于 2009-01-05T21:59:33.553 回答
2

你可以给它一个机会: SQL Parse and Compile

于 2009-04-09T15:58:54.577 回答
1

Facebook 发布了他们的FQL 解析器的开源 PHP 版本。从我的情况来看,这是非常简洁的代码。您可能会破解它以使用常规 SQL。

于 2008-11-13T13:27:50.957 回答
1

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

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

于 2009-01-05T17:40:19.987 回答
1

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

于 2009-01-25T00:09:08.647 回答