Как использовать пустую переменную в 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-инъекций.