我有一个列名为“category”的表。在PHP中,我使用sql prepare语句来选择属于指定类别的所有记录。我这样做类别=?然后使用类别值添加变量。这很好。
但是,如何在同一查询中选择所有类别?
我尝试使用null和''作为类别值,但这不起作用。使用另一个查询复制整个代码部分可能会创建spagetti代码,因此我想知道是否有更好的选项。有吗?
谢谢!
答案 0 :(得分:1)
在@JamesMarks提供的基础上,使用像
这样的查询会更简单$query = "SELECT * FROM table WHERE category = ? OR 1 = ?;"
然后传递$ category作为第一个参数,并将1或0作为第二个参数。如果您传递1,则第二个词将变为1 = 1
。这总是正确的,所以整个表达总是如此。如果你传递0,那么第二个术语是1 = 0
并且它总是假的,但是只有当category = $category
匹配时整个表达式才会为真。
这比为“任何类别”指定特殊值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);
}
答案 1 :(得分:0)
假设您有一个自动生成的ID(AUTO_INCREMENT或IDENTITY,具体取决于您的数据库引擎),您可以使用类似于以下内容的WHERE子句。
$ query =“SELECT * FROM table WHERE category = $ category OR $ category = 0;”
如果需要“所有类别”,只需将值0传递给$ category变量。
如果您不想传递$ category的值,而是希望能够传递空白的$ category,则可以在构建查询字符串之前将$ category设置为0:
$ category =(空($ category)?“0”:$ category); $ query =“SELECT * FROM table WHERE category = $ category OR $ category = 0;”;
...或者您可以在一行上重写,如下所示。
$ query =“SELECT * FROM table WHERE category = $ category OR”。 (空($ category)?“0”:$ category)。 “= 0;”