2

我有一个列名为“类别”的表。在 PHP 中,我使用 sql prepare 语句来选择属于指定类别的所有记录。我用 category=? 然后添加具有类别值的变量。这工作正常。

但是,如何在同一个查询中选择所有类别?

我尝试使用 null 和 '' 作为类别值,但这不起作用。为另一个查询复制整个代码部分可能会创建 spagetti 代码,因此我想知道是否有更好的选择。在那儿?

谢谢!

4

2 回答 2

2

基于@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);
}
于 2013-10-06T18:50:30.983 回答
0

假设您有一个自动生成的 ID(AUTO_INCREMENT 或 IDENTITY,取决于您的数据库引擎),您可以使用类似于以下的 WHERE 子句。

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

当您想要“所有类别”时,只需将值 0 传递给您的 $category 变量。

如果您不想传递 $category 的值,而是希望能够传递空白 $category,则可以在构建查询字符串之前将 $category 设置为 0:

$category = ( empty($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;"

于 2013-10-06T17:31:19.540 回答