Как использовать пустую переменную в MySQL более одного раза?
Я пытаюсь проверить наличие двух пустых переменных в инструкции MySQL, но я могу показать, что синтаксис подходит для него. Вот то, что у меня есть сейчас, и оно продолжает давать мне ошибку. Может кто-нибудь, пожалуйста, скажите мне, как я могу это сделать правильно?
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
Ответы
Ответ 1
Использование:
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
Должно быть предложение WHERE, прежде чем вы укажете "AND..." - 1 = 1
будет оптимизирован. Это трюк, используемый для динамического SQL, чтобы упростить констатацию предложения WHERE.
Ответ 2
Ну неудивительно, что это дает вам ошибку. Вы используете PHPkit или что-то еще, что дает вам iif
Потому что, несмотря на то, что вы этого не говорите, выше написано на PHP, а iif
не является частью языка.
Теперь, даже если у вас есть это, почему бы не скомпилировать инструкцию красиво - собрать условия в массиве, взорвать с помощью AND и добавить условие WHERE, если оно не пусто.
Наконец, наличие переменных в запросах - это рецепт для атак SQL-инъекций.