我正在使用PHP应用程序连接到MySQL,我想要做的是设置已经登录的客户端的userID,然后在视图和函数中使用该MySQL变量来限制返回的数据。
目前,我只是使用:-
SET @UserID = 3;然后在视图/函数中引用它。
这是跨多个并发用户会话执行此操作的合适且可靠的方法吗?这会在用户的MySQL连接(或页面加载)的生命周期中存在吗?显然,我希望确保没有其他连接使用它。它是在每次页面加载(或从我的应用程序重新连接MySQL )时设置的。
谢谢大家!
发布于 2013-07-23 03:25:59
正如它在mysql变量手册页的第一段中明确指出的那样:http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
用户定义变量是特定于会话的。也就是说,由一个客户端定义的用户变量不能被其他客户端看到或使用。当客户端退出时,给定客户端会话的所有变量都会自动释放。
例如,它们在php<->mysql连接保持活动状态时存在,每个连接,并在连接关闭/终止时自动删除。除非您在PHP中使用持久连接(无论如何都不应该使用持久连接),否则mysql变量基本上会在该特定脚本调用期间存在,并且在同一用户稍后带着另一个http请求返回时将不可用。
发布于 2013-07-23 03:26:29
因此,严格地说,您所做的应该不是问题(每个PHP连接或多或少都是独立存在的)。但是,也就是说,这不是最好的方法。
我认为你有一个“如果你只有一把锤子,所有的东西看起来都像一颗钉子”的问题。MySQL在设计时并没有考虑到请求生命周期,它也不应该意识到这一点。另一方面,PHP就是按照这种思想设计的。
而不是:
mysqli_query('Set @UserID=' . $id);
$output = mysqli_query('SELECT * FROM FOO WHERE ID=@UserID');为什么不直接使用bound variables?
https://stackoverflow.com/questions/17795660
复制相似问题