我有其中一天,
我有四个可能的变量,只需要其中一个变量。我的问题是,如果查询的某些部分可能显示或不显示,我如何准备一个语句/构造sql查询。
这样的事情,我想:
sql = "SELECT * FROM dogs WHERE name = ?"
if(isset($dogid)) {
sql .= "AND WHERE id = ?";
}
}
if(isset($dogcolour)) {
sql .= "AND WHERE colour = ?";
}
我的大脑完全坏了,我认为必须有更好的方法来准备它,而不是像$ dogID =" true&#34 ;;在每个if中,然后在最后用一堆if语句绑定它。
MySQL显然有办法解决这个问题,我只是不记得那是什么。
感谢。
答案 0 :(得分:1)
我会定义一些空值,然后检查数据库中的所有内容。
$sql = "SELECT * FROM dogs WHERE (IF(? = 0, 1 = 1, name = ?)) AND (IF(? = 0, 1 = 1, colour = ?))"
这个解决方案有一个缺点,你需要传递所有参数两次:
$statement->bind_param('ssss', $name, $name, $colour, $colour);
如果name或$ color变量为0,则在where语句中执行1 = 1
(始终为true)。应该有可能将NULL值传递给mysqli,但对我来说它不起作用,如果它工作则可以简化查询。
$sql = "SELECT * FROM dogs WHERE name = (IFNULL(?, name)) AND colour = (IFNULL(?, colour))"