我试着在我的数据库上做一个小的记录表。
用户
+----+------+
| id | name |
+----+------+
| 1 | FOO |
| 2 | BAR |
| 3 | LOS |
+----+------+Log_Users
+-------------+-------------------+------+-----+-------------------+-----------------------------+
| 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进行最优活动日志记录,以及如何做到这一点?我目前还没有解决这个问题的办法。谢谢。
发布于 2015-12-28 16:03:14
我从来没有用触发器做过这件事,所以我很遗憾地帮不了你。我通常是怎么做到的:
您的用户永远不能直接访问mysql或phpmyadmin,他们应该使用您提供的PHP脚本创建、编辑、删除和其他任何东西。通过这种方式,您可以完全控制用户可以和不能做的事情,并且可以缩小执行的可定位操作范围,因此创建日志要容易得多。例如:
您有一个php脚本,用户用来做一些事情并插入一个新行,然后在日志表上做一个插入,记录下最后的操作。
https://stackoverflow.com/questions/34496623
复制相似问题