0

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

目前,我只是在使用:-

SET @UserID = 3;

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

这是跨多个并发用户会话执行此操作的合适且可靠的方法吗?这将在该用户从 PHP 的 MySQL 连接(或页面加载)的生命周期内出现,我显然希望确保没有其他连接利用这一点。它在每次页面加载(或从我的应用程序重新连接 MySQL)时设置。

谢谢大家!

4

2 回答 2

1

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

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

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

于 2013-07-22T19:25:59.413 回答
0

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

我认为你有一个“如果你只有一把锤子,那么一切看起来都像钉子”的问题。MySQL 在设计时并未考虑到请求生命周期,因此它不需要了解它。另一方面,PHP 正是按照这个想法设计的。

代替:

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

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

于 2013-07-22T19:26:29.473 回答