php - MYSQL 用户定义的@VARIABLE

标签 php mysql angularjs session-variables user-defined

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

登录后我需要做的事情:

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

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

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

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

最佳答案

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

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.

如果您将重用相同的连接,那么根据定义,变量将是相同的(因此,“共享”)。但是,如果您的请求初始化不同的连接,那么您将无法在另一个 session 中访问一个 session 中的变量。

作为结论 - 用户定义的变量从来就不是用于状态转换的,这是不安全的,而且实际上,即使在一个 session 上下文中的多个查询中依赖它们也会产生副作用。它们可能用于“调整”您的查询(比方说,与枚举相关的问题,因为 MySQL 中不存在序列),但我不建议使用它们进行状态传输。

关于php - MYSQL 用户定义的@VARIABLE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28880303/

相关文章:

php - 为什么只返回数组的第一个元素?

javascript - Chartjs 仅渲染最后一个循环( ionic )

php - MySQL查询结果的第一行未显示

php - 如何获取数据库的用户密码

php - 从数据库中查找字段为日期时间数据类型的数据

javascript - 无法在AngularJS中进行数学计算

javascript - 合并来自两个http请求的AngularJS对象

php - 错误消息 "Strict standards: Only variables should be passed by reference"

php - 在第 n 次登录尝试后阻止用户 - PHP

java - hibernate + "ON DUPLICATE KEY"逻辑