我有一张桌子可以保存一些用户代理,如Mozilla,Google Chrome,Opera等 结构如下
[ id , user_agent , exact_match ]
我想阻止任何用户,如果他使用其中一个用户代理在我的表中被阻止,但也计算了exact_match的值。
例如,如果我将exact_match设置为1 (TRUE)
,我想对用户代理执行完整的字符串检查,但如果我设置为0 (FALSE)
,我想使用LIKE mysql查询。
如果我选择所有用户代理并依赖exact_match,我可以轻松地执行此操作,我可以执行stristr函数或只执行strcmp。
这可以仅使用一个sql查询而不是PHP代码来完成吗?
修改: 所有检查都应该使用不区分大小写的搜索来完成。
谢谢
答案 0 :(得分:1)
这比你想象的容易得多。
SELECT id, user_agent, exact_match
FROM table
WHERE (exact_match = 1 AND user_agent = :USER_AGENT_EXACT)
OR (exact_match = 0 AND user_agent LIKE :USER_AGENT_LIKE)
然后准备你的陈述,然后用USER_AGENT_EXACT
和USER_AGENT_LIKE
绑定所需的字符串,然后离开!