我正在编写一个 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/