MySQL变量PHP连接


MySQL Variables PHP COnnections

我正在使用一个PHP web应用程序连接到MySQL,我想做的是设置登录的客户端的userID,然后在视图和函数中使用该MySQL变量来限制返回的数据。

目前,我只是简单地使用:-

SET @UserID = 3;

然后在视图/函数中引用它。

在多个并发用户会话中,这是一种合适且可靠的方法吗?这会在用户从PHP连接MySQL(或页面加载)的整个生命周期中存在吗?我显然想确保没有其他连接利用这一点。它是在每次页面加载(或从我的应用程序重新连接MySQL)时设置的。

谢谢大家!

正如mysql变量手册页第一段中明确指出的那样:http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

用户定义的变量是特定于会话的也就是说,一个客户端定义的用户变量不能被其他客户端看到或使用。给定客户端会话的所有变量都会在该客户端退出时自动释放。

例如,当php<->mysql连接保持活动,PER连接,并在连接关闭/终止时自动删除。除非您在PHP中使用持久连接(无论如何都不应该使用),否则mysql变量基本上会在特定脚本调用的生命周期内存在,并且当同一用户稍后返回另一个http请求时将不可用。

因此,严格来说,您所做的不应该是一个问题(每个PHP连接或多或少是独立存在的)。但是,也就是说,这不是最好的方法。

我认为你有一个"如果你只有一把锤子,一切看起来都像钉子"的问题。MySQL在设计时并没有考虑到请求的生命周期,也不需要意识到这一点。

代替:

mysqli_query('Set @UserID=' . $id);
$output = mysqli_query('SELECT * FROM FOO WHERE ID=@UserID');

为什么不使用绑定变量呢?