Использование тернарного оператора в запросе MySQLi - PullRequest
0 голосов
/ 12 января 2020

Я хочу использовать троичную операцию в моем запросе MYSQLi. Я искал форум и нашел ответы, как это сделано, но в моем случае это не работает вообще. Я опубликую то, что я пытался:

$topsearch_listings = mysqli_query($conn, "SELECT * FROM listing WHERE published='yes' AND topsearch=1 ".$selected_category == 'All' ? '' : 'AND category='$selected_category''." ORDER BY rand()");

Так что я пытаюсь сделать, если выбранная категория равна "All", ничего не делать, а если выбранная категория не равна All, добавить AND category='$selected_category'. Что не так с моей троичной и как я могу использовать ее в моем запросе?

Ответы [ 2 ]

2 голосов
/ 12 января 2020

Такой запрос - не более чем просто строка, поэтому обрабатывайте ее одинаково - оператору необходимо знать, где находятся его границы, поэтому:

$topsearch_listings = mysqli_query($conn, "SELECT * FROM listing WHERE published='yes' AND topsearch=1 ". ($selected_category == 'All' ? '' : 'AND category=\''.$selected_category.'\'')  ." ORDER BY rand()");

Убедитесь, что еще не знаете, что это не так. безопасно выполнять запросы, как это. Я бы предложил выполнить РАЗНЫЕ запросы для открытого случая (Все) и отдельных (где есть категория). Кроме того, вы должны использовать связанные переменные или, по крайней мере, попытаться экранировать ввод.

2 голосов
/ 12 января 2020

Вы можете попробовать это

$cond = $selected_category == 'All' ? "" : " AND category='$selected_category' ";

$topsearch_listings = mysqli_query($conn, "SELECT * FROM listing WHERE published='yes' AND topsearch=1 ".$cond."  ORDER BY rand()");

Рекомендуется использовать Подготовленные MySQLi заявления Подробнее об этом здесь https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php

...