在 MySQL 方面需要帮助,因为它不是我的专长。因此,我们将不胜感激。
我的网站上存在问题,其中 UPDATE
或 INSERT
使用缺失值完成。这导致网站上的其他功能出现一些问题,但我无法在任何类中找到 UPDATE
或 INSERT
的位置。
有什么方法,可能是 MySQL 触发器,我可以添加到这些表中,以便我存储 UPDATE
或 INSERT
的原始或完整查询.我尝试过日志记录,但这适用于整个数据库,并且占用了太多磁盘空间。
提前感谢您的任何回复。
PS:目前,PHP 类有点乱,因为我们还处于开发阶段,所以在更新或插入函数中添加异常会花费太多时间。所以请重点回答问题。再次感谢。
最佳答案
您可以使用以下语句将当前 SQL 查询作为字符串获取:
SELECT info FROM INFORMATION_SCHEMA.PROCESSLIST WHERE id = CONNECTION_ID()
所以你要做的是创建一个TRIGGER
,它在你的表上运行插入和/或更新操作,应该(i)获取当前的sql语句并 (ii) 将其插入到另一个表中,如下所示:
DELIMITER |
CREATE TRIGGER log_queries_insert BEFORE INSERT ON `your_table`
FOR EACH ROW
BEGIN
DECLARE original_query VARCHAR(1024);
SET original_query = (SELECT info FROM INFORMATION_SCHEMA.PROCESSLIST WHERE id = CONNECTION_ID());
INSERT INTO `app_sql_debug_log`(`query`) VALUES (original_query);
END;
|
DELIMITER ;
您必须创建两个触发器 - 一个用于更新,一个用于插入。触发器将新查询作为字符串插入到 query
列的 app_sql_debug_log
表中。
关于mysql - 在插入或更新时获取完整的 MySQL 查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10628640/