我想在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)