Mysql:在PHP中构建WHERE子句或在查询中使用IF函数


Mysql: Building WHERE clauses in PHP or using IF function in query?

我过去花了很多PHP代码来构建复杂的mySQL查询。出于某种原因,在我切换到PDO的过程中,我也在尝试编写更干净、更简单的SQL——也许是因为我不能只在出现错误时转储查询。

无论如何,我有一个功能,我想向用户显示适用于他们的特定数据块,除非用户以管理员身份登录,在这种情况下,管理员会看到所有数据。

我正考虑这样做:

SELECT col_a, col_b FROM some_table WHERE cond_1 = 'something' AND IF (admin_user = :logged_in_user, 1=1, userID = :logged_in_user)

这种方法被认为是"正确"的做法吗?还是只在PHP中使用条件逻辑来构建WHERE子句更好?

我想说两者都是安全的,但MySQL解决方案似乎更容易出错。用PHP做这件事似乎更有意义,因为PHP可能是处理登录会话的工具,MySQL可能无论如何都会从PHP获取数据。我说,去找源头。

可能是(admin_user = :logged_in_user OR userID = :logged_in_user),它更容易接受,并且可能更容易通过MySQL进行优化(不知道)

也许可以对其进行存储过程,从而避免两次传递logged_in_user。我发现我的SQL足够短,会将logged_in_user重命名为更短的名称。

总的来说,我认为引入一个全局变量并不好。也没有那么抽象或紧凑。