我正试图在数据库中创建一个小的日志记录表。
用户
+----+------+
| id | name |
+----+------+
| 1 | FOO |
| 2 | BAR |
| 3 | LOS |
+----+------+
日志用户
+-------------+-------------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------------+------+-----+-------------------+-----------------------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| old_id | int(11) | YES | | NULL | |
| old_name | varchar(100) | YES | | NULL | |
| new_id | int(11) | YES | | NULL | |
| new_name | varchar(100) | YES | | NULL | |
| action_type | enum('C','U','D') | YES | | NULL | |
| time | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| doers | int(11) | YES | | NULL | |
+-------------+-------------------+------+-----+-------------------+-----------------------------+
我有一个使用PHP创建的小应用程序,用于将用户的id保存到会话中。我如何将这个用户的id值(在PHP会话中)发送到其中一个表的触发器,以记录他们的活动,比如删除另一个用户或更新他们?我试着在日志表上使用触发器来做所有的事情,比如这样。
CREATE TRIGGER userTrigger BEFORE INSERT ON Log_Users FOR EACH ROW
BEGIN
IF(new.action_type = 'C') THEN
INSERT INTO Users(id, name) VALUE(new.new_id, new.new_name);
ELSEIF(new.action_type = 'U') THEN
UPDATE Users SET id = new.new_id, name = new.new_name WHERE id = new.old_id;
ELSEIF(new.action_type = 'D') THEN
SET new.old_name = (SELECT name FROM Users WHERE id = new.old_id);
DELETE FROM Users WHERE id = new.old_id;
END IF;
END~
但是,当用户更新同一列上的多个记录时,我很难解决这个问题。最后,什么是,如何使用PHP和MySQL进行最佳的活动日志记录,以及如何做到这一点?我目前还没有解决这个问题的办法。非常感谢。
我从来没有使用过触发器,所以很遗憾我不能帮你。我通常是怎么做的:
您的用户不应该直接访问mysql或phpmyadmin,他们应该使用您提供的PHP脚本创建、编辑、删除和其他任何内容。通过这种方式,您可以完全控制用户可以做什么和不能做什么,并且可以缩小执行的许多可能操作的范围,因此创建这些操作的日志要容易得多。例如:
您有一个php scrip,用户可以使用它来做一些事情并插入新行,然后在记录最后一个操作的日志表上进行插入。