在 MySQLi 查询中使用三元运算符

Using ternary operator in MySQLi query

我想在我的 MYSQLi 查询中使用三元运算。我搜索了论坛并找到了如何完成的答案,但就我而言,它根本不起作用。我会 post 我试过的:

$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",什么都不做,如果所选类别不等于全部,则添加 AND category='$selected_category'。我的三进制有什么问题,如何在我的查询中使用它?

你可以试试这个

$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

像这样的查询只不过是一个字符串,所以同样对待它 - 操作员需要知道它的边界在哪里 - 因此:

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

请务必了解执行这样的查询是不安全的。我建议对开放案例(全部)和特定案例(有类别)执行不同的查询。另外,您应该使用绑定变量或至少尝试转义输入。