我希望在PHP中解析INSERT和UPDATE MySQL SQL查询,以确定从原始数据中做出哪些更改。现在这很容易创建,但我想看看PHP中是否有任何现有的库来执行此操作。
基本上我所拥有的是一个包含已在数据库上运行的所有上述查询的表。我已经分离出了表名和查询类型。我希望根据这些数据为用户查看创建一个完整的更改日志,因此我需要获取原始INSERT的值,然后在每个UPDATE中进行更改。最后我需要字段名称和新值以及记录ID。我会做其余的检查/美化,包括人类可读的列名,以及字段值是否实际没有改变。
目前,我可能不需要做多个表UPDATE,但它会很有用。
有哪些图书馆可以做到这一点?
有点问题,但也许值得考虑的建议:
从MySQL 5.0开始,对触发器的支持非常好。如果要记录对数据库所做的更改,而不是存储sql语句,还可以定义插入/更新触发器并定义另一个可以存储这些值的表。例如,您可以创建一个包含字段的简单表
timestamp, user, field, old_value, new_value
并且只要在其中一个监视的表上发生DML,就插入相应的值。
为了进一步简化这一点,您可以添加该字段
table
到“跟踪表”,将所有观察表的所有更改存储在一个地方。
见 MySQL手册 有关此主题的更多信息。
Facebook发布了他们的开源PHP版本 FQL解析器。从我的意思是它是非常整洁的代码。您可能会破解使用常规SQL。
简而言之,我发现PEAR:SQL_Parser包提供了最干净的短期解决方案,而PEAR:PHP_Parser_Generator包(FSQL使用的生成器)看起来像是一个非常强大的长期解决方案。
我发现txtSQL不够健壮,并且不能很好地解析SQL以保证使用,至少在我看来。