【发布时间】:2012-10-03 16:19:09
【问题描述】:
在我的一个 PHP 网站上,我需要让我的用户能够选择某些行以从网站上的所有搜索结果(查询)中排除。
我应该以哪种方式处理排除项,我应该:
1) 每当用户登录(或更新)时,通过查询预编译排除行列表,将列表保存在 Session 变量中,然后简单地将 $query .= " AND userid NOT IN ({$_SESSION['ExclusionList']})" 添加到网站上的每个搜索查询中,
或
2) 只需将$query .= " AND userid NOT IN (SELECT userid FROM Excluded WHERE excludedBy = '$currentUserID')" 添加到网站上的每个搜索查询,就可以直接在每个查询中即时编译它?
方法 1) 似乎更有效,因为我只在用户登录时(或每当他们更新它时)编译列表一次,而不是每次任何用户在网站上运行搜索查询时都必须编译列表.
你有什么建议,为什么?
【问题讨论】:
-
始终非常小心地正确转义插入到 SQL 查询中的 any 和 all 值以避免SQL injection bugs。