我有一个列名为“category”的表。在PHP中,我使用sql prepare语句来选择属于指定类别的所有记录。我用类别=?然后用category值添加变量。这很管用。
但是,如何在同一查询中选择所有类别?
我尝试使用null和“”作为类别值,但这不起作用。用另一个查询复制整个代码部分可能会创建spagetti代码,因此我想知道是否有更好的选项。有?
谢谢!

最佳答案

在@JamesMarks提供的基础上,使用类似于

$query = "SELECT * FROM table WHERE category = ? OR 1 = ?;"

然后为第一个参数传递$category,并将1或0作为第二个参数。如果你通过1,那么第二个学期就变成1 = 1。那总是真的,所以整个表情都是真的。如果通过0,则第二个项为1 = 0,这始终为false,但只有当category = $category匹配时,整个表达式才为true。
这比为“任何类别”指定一个特殊值0更简单、更好的样式
另一种解决方案是动态构建查询:
$where = array();
if ($category) {
    $where[] = "category = ?";
    $params[] = $category;
}

... perhaps add more terms to $where conditionally ...

$query = "SELECT * FROM table";
if ($where) {
    $query .= " WHERE " . implode(" AND ", $where);
}

10-07 16:02
查看更多