【问题标题】:Logging Application Activities on PHP and MySQL在 PHP 和 MySQL 上记录应用程序活动
【发布时间】:2015-12-28 15:55:12
【问题描述】:

我正在尝试在我的数据库上创建一个小型日志记录表。

用户

+----+------+
| 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 进行最佳活动记录以及如何做到这一点?我暂时没有解决这个问题的办法。谢谢。

【问题讨论】:

    标签: php mysql logging triggers


    【解决方案1】:

    我从来没有使用触发器做过这个,所以很遗憾我无法帮助你。我通常是怎么做的:

    您的用户不应该直接访问 mysql 或 phpmyadmin,他们应该使用您提供的 PHP 脚本创建、编辑、删除和其他任何内容。通过这种方式,您可以完全控制用户可以做什么和不可以做什么,并且可以缩小很多可能执行的操作,因此创建它们的日志要容易得多。例如:

    您有一个用户用来做一些事情并插入新行的 php 脚本,然后您在记录最后一个操作的日志表上执行插入操作。

    【讨论】:

    • 那么,我只需要一个带有事务的程序来保持记录稳定吗?我想为数据库和应用程序防止一些关于“未来的东西”的东西,所以我不需要在制作完之后改变很多东西。
    猜你喜欢
    • 2011-12-25
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2011-02-28
    • 2011-09-01
    • 2012-06-02
    • 2012-08-31
    相关资源
    最近更新 更多