我试图在MySQL语句中检查2个空变量,但我似乎可以得到它的语法。这是我现在拥有的,它一直给我一个错误。谁能告诉我如何正确地做到这一点?
SELECT threads, userid, username, usergroupid
FROM " . TABLE_PREFIX . "user
WHERE
" . iif(!empty($exuserids), "AND userid NOT IN ($exuserids)") . "
" . iif(!empty($exgroups), "AND usergroupid NOT IN ($exgroups)") . "
ORDER BY threads DESC
LIMIT 1
答案 0 :(得分:5)
使用:
SELECT threads, userid, username, usergroupid
FROM " . TABLE_PREFIX . "user
WHERE 1 = 1
" . iif(!empty($exuserids), "AND userid NOT IN ($exuserids)") . "
" . iif(!empty($exgroups), "AND usergroupid NOT IN ($exgroups)") . "
ORDER BY threads DESC
LIMIT 1
在指定“AND ...”之前需要有一个WHERE子句 - 1 = 1
将被优化掉。这是一个用于动态SQL的技巧,可以使WHERE子句连接更容易。
答案 1 :(得分:0)
难怪它会给你一个错误。您使用的是PHPkit还是其他能够提供iif
的东西因为,尽管您没有这样说,但上述内容是用PHP编写的,iif
不是该语言的一部分。
现在,即使你有它为什么不巧妙地编译语句 - 收集数组中的条件,使用AND内爆并且如果它不为空则添加WHERE条件。
最后,在查询中使用变量是SQL注入攻击的一个方法。