MYSQL 用户定义的@VARIABLE
MYSQL User Defined @VARIABLE
我正在编写一个 php-angularjs webapp,我现在正在创建一个修订系统,其中包含 insert/update 上的过程和触发器。
登录后我需要做的事情:
$sql = 'SET @id_user := ' . (int)$_SESSION['user']['id_user'].';';
如果我 select 它运行良好(returns 用户 ID 符合预期)
但后来(1 分钟后)在访问了几个查询和页面之后,当我更新客户 table 时,一切都很好,除了 @user_id var 是 null
问题:
有没有一种方法可以为我的整个会话设置 var,以避免每次我需要记录修改时都重复 SET @var?
(还需要考虑我有多个管理员)
User-defined variables 在 MySQL 中受会话限制。因此,它们存在于单一连接的上下文中。
User-defined variables are session-specific. That is, a user variable
defined by one client cannot be seen or used by other clients. All
variables for a given client session are automatically freed when that
client exits.
如果您将重用相同的连接,那么根据定义,变量将是相同的(因此,"shared")。但是,如果您的请求初始化了不同的连接,那么您将无法从一个会话中访问另一个会话中的变量。
作为结论 - 用户定义的变量从未打算用于状态转换,它是不安全的,实际上,即使在一个会话的上下文中跨多个查询依赖它们也是一种副作用。它们可能用于 "tune" 您的查询(比方说,与枚举相关的问题,因为 MySQL 中不存在序列),但我不建议将它们用于状态传输。
我正在编写一个 php-angularjs webapp,我现在正在创建一个修订系统,其中包含 insert/update 上的过程和触发器。
登录后我需要做的事情:
$sql = 'SET @id_user := ' . (int)$_SESSION['user']['id_user'].';';
如果我 select 它运行良好(returns 用户 ID 符合预期) 但后来(1 分钟后)在访问了几个查询和页面之后,当我更新客户 table 时,一切都很好,除了 @user_id var 是 null
问题: 有没有一种方法可以为我的整个会话设置 var,以避免每次我需要记录修改时都重复 SET @var?
(还需要考虑我有多个管理员)
User-defined variables 在 MySQL 中受会话限制。因此,它们存在于单一连接的上下文中。
User-defined variables are session-specific. That is, a user variable defined by one client cannot be seen or used by other clients. All variables for a given client session are automatically freed when that client exits.
如果您将重用相同的连接,那么根据定义,变量将是相同的(因此,"shared")。但是,如果您的请求初始化了不同的连接,那么您将无法从一个会话中访问另一个会话中的变量。
作为结论 - 用户定义的变量从未打算用于状态转换,它是不安全的,实际上,即使在一个会话的上下文中跨多个查询依赖它们也是一种副作用。它们可能用于 "tune" 您的查询(比方说,与枚举相关的问题,因为 MySQL 中不存在序列),但我不建议将它们用于状态传输。