MySQL where子句等于任何东西(SELECT*WHERE col = ANY_VALUE)

use*_*478 20 php mysql

我想在MySQL中创建一个具有可选值的查询.指定值时,将使用该值过滤查询,此时值不是返回所有行.这是个主意:

public function doQuery($item = 'ANY_VALUE') {
  $query = "SELECT * FROM table WHERE item = ?";
  db->fetchAll($query,array($item))
  ...
}

doQuery(); // Returns everything
doQuery($item='item1'); // Returns only rows where item = 'item1'
Run Code Online (Sandbox Code Playgroud)

有没有根据$ item的值创建两个查询字符串的简单方法?

Pek*_*ica 20

据我所知,没有这样的"任何"占位符存在.

如果你可以使用LIKE,你可以这样做

SELECT * FROM table WHERE item LIKE '%'
Run Code Online (Sandbox Code Playgroud)

如果你可以追加一个条件,你可以使这样的item句子无效:

SELECT * FROM table WHERE item = ? OR 1=1
Run Code Online (Sandbox Code Playgroud)

(但是在你的例子中不会起作用,因为你将"item"作为参数传递)

这就是我能看到的所有选项 - 使用两个查询可能最容易,WHERE在第二个查询中完全删除该条款.

这可能会奏效,但从数据库的角度来看,我不确定这是不是一个好主意.

public function doQuery($item = 'ANY_VALUE') {
  $query = "SELECT * FROM table WHERE item = ? OR 1 = ?";
  db->fetchAll($query,array($item, ($item == 'ANY_VALUE' ? 1 : 0))
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • 扩展第二个例子:SELECT*FROM table WHERE item =?或1 =?如果需要特定行,则在第二个参数中输入0;如果需要,则输入1 (2认同)