PHP:解析MySQL查询语句中的列名值?
我正在尝试为一个网站建立审计日志记录。我想做的是,如果可能的话,允许现有的MySQL查询进入一个PHP函数,该函数解析数据并将其存储在审计日志表中 例如,如果我有查询PHP:解析MySQL查询语句中的列名值?,php,mysql,sql,parsing,Php,Mysql,Sql,Parsing,我正在尝试为一个网站建立审计日志记录。我想做的是,如果可能的话,允许现有的MySQL查询进入一个PHP函数,该函数解析数据并将其存储在审计日志表中 例如,如果我有查询 UPDATE members SET name='Bob', age='40' WHERE memberId=123 然后我希望能够提取表名成员、rowid123和两个列/数据,就像键/值对name:Bob和age:40一样 如果可能的话,我想要一个解决方案,该解决方案还允许其他查询格式: UPDATE members (nam
UPDATE members SET name='Bob', age='40' WHERE memberId=123
然后我希望能够提取表名成员、rowid123和两个列/数据,就像键/值对name:Bob和age:40一样
如果可能的话,我想要一个解决方案,该解决方案还允许其他查询格式:
UPDATE members (name,age) VALUES ('Bob','40') WHERE memberId=123
然后这些将进入审计日志表,该表如下所示:
+--------+---------+--------+-----+-----------+-----------+
| user | table | column | row | old_value | new_value |
+--------+---------+--------+-----+-----------+-----------+
| admin | members | name | 123 | Joe | Bob |
+--------+---------+--------+-----+-----------+-----------+
| admin | members | age | 123 | 32 | 40 |
+--------+---------+--------+-----+-----------+-----------+
显然,要填充这个表,您可以看到为什么我需要提取这些值。理想情况下,我希望从现有的MySQL查询字符串中执行此操作,并将其传递到PHP函数中以处理现有代码,但如果需要实现新的PHP函数,我愿意听取建议
Regex看起来既复杂又痛苦,因为我必须为每个表的每个列名格式化它。有没有解决这个问题的解析方法?您是否使用任何框架?解析SQL是一种糟糕的做法。例如,在Zend Framework中,您可以覆盖update或insert,只需获取SQL模式即可。您需要两件事:一个审计表和一个触发器!审计表将包含每个字段的新值和旧值。我会为每个表创建一个审计表,我认为这比为所有表创建一个审计表要好。触发器将完成繁重的工作。不,目前plage中没有框架。我不希望每个表都有一个单独的表,因为这样一来,单从表/列的数量上来说,数据库的大小就增加了一倍。您可以为每个表创建一个触发器,并且每个触发器调用只需一个过程。我不认为每个表都有触发器是一个问题。我在许多系统中使用过大型数据库,每个表3k、5k表有一个触发器。你可以动态地做,这里有一个例子:@JorgeCampos:你每天都学到一些东西,我不认为要动态地创建,你是绝对正确的!