【问题标题】:Functioning of MySQL Session variables in triggerMySQL Session 变量在触发器中的作用
【发布时间】:2014-06-12 07:55:09
【问题描述】:

我有两个实体(如下所示): 1. 用户 2. 书籍

现在,我的任务是在每次用户删除一本书时在“日志表”中记录活动。 book 和 log 表的架构如下:

书桌:

id      book
--      ----
1        B1
2        B2
3        B3
4        B4

日志表:

user    record_id     record_type    action
----    ---------     -----------    ------
12          7            book        delete

用户要删除一本书,他需要登录系统。 因此,一旦用户登录系统,我就会获取其 USERID 并将其存储在 PHP 会话和 MySQL 会话变量中。

$_SESSION['user_id'] = $user_id;
mysqli_query("SET @user_id = $user_id");  //I am planning to use this value in my mysql trigger.

现在,为了将条目存储在日志表中,我使用了下面显示的触发器。

DROP TRIGGER IF EXISTS `book_delete`;
CREATE TRIGGER book_delete AFTER DELETE ON books
FOR EACH ROW
BEGIN
    INSERT INTO log_table(`user`, `record_id`, `record_type`, `action`)
    VALUES (@user_id, OLD.`books.id`, 'book','delete');
END;

我的担忧是:

一个。我是否可以信任触发器中的 MySQL 变量(即@user_id)?

b.触发器中使用的@user_id 是否将始终具有用户登录时设置的值?

c。多个用户同时登录会发生什么?

请帮忙。

【问题讨论】:

    标签: php mysql session


    【解决方案1】:

    每个 PHP 页面可以使用一个或多个与数据库的连接。
    MySQL 中的变量与已定义的连接密切相关(随着连接而生和死,如果从未定义,则其值为 NULL)。
    每次在 PHP 中创建新的数据库连接时,您都必须为变量定义并赋予正确的值。
    这意味着:

    ...
    $user_id = $_SESSION['user_id'];
    ...
    $link = mysql_connect($server, $username, $password);
    mysql_query("SET @user_id = $user_id", $link);
    mysql_query("DELETE FROM book WHERE id = $book_id", $link);
    ...
    mysql_close($link);
    ...
    

    http://php.net/manual/en/function.mysql-connect.php
    http://php.net/manual/en/function.mysql-query.php


    这样:
    a) 您可以信任触发器中的变量,因为您定义并为其提供了正确的值。
    b) 是的,但这也取决于您编写的 php 代码。
    c) 没有区别,因为每个用户将使用不同的数据库连接。

    【讨论】:

      猜你喜欢
      • 2022-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 2012-09-29
      • 1970-01-01
      相关资源
      最近更新 更多