在PHP和MySQL上记录应用程序活动


Logging Application Activities on PHP and MySQL

我正试图在数据库中创建一个小的日志记录表。

用户

+----+------+
| 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,用户可以使用它来做一些事情并插入新行,然后在记录最后一个操作的日志表上进行插入。