MYSQL用户定义@VARIABLE

时间:2015-03-05 14:33:05

标签: php mysql angularjs session-variables user-defined

我正在编写一个php-angularjs webapp,现在我在插入/更新时创建了一个带有过程和触发器的修订系统。

登录后我需要做:

$sql = 'SET @id_user := ' . (int)$_SESSION['user']['id_user'].';';

如果我选择它会很好(按预期返回用户ID) 但在稍后(1分钟后)访问了几个查询和页面之后,当我更新客户表时,一切都很好,除了@user_id var为null

问题: 有没有办法可以为我的完整会话设置var,以避免每次需要记录修改时重复SET @var?

(还需要认为我有多个管理员)

1 个答案:

答案 0 :(得分:2)

User-defined variables在MySQL中是会话绑定的。因此,它们存在于单一连接的上下文中。

  

用户定义的变量是特定于会话的。也就是说,一个用户变量   由一个客户端定义的其他客户端无法查看或使用。所有   在此时,将自动释放给定客户端会话的变量   客户退出。

如果您将重复使用相同的连接,那么根据定义,变量将是相同的(因此,"共享")。但是,如果您的请求初始化了不同的连接,那么您将无法从另一个会话中访问变量。

作为结论 - 用户定义的变量从未用于状态转换,它是不安全的,实际上,即使在一个会话的上下文中跨多个查询依赖它们也会产生副作用。他们可能习惯于调整"你的查询(让我们说,MySQL中没有序列相关的问题),但我不建议将它们用于状态转移。