MySQLi编写了条件语句

时间:2015-01-13 20:14:00

标签: mysql mysqli

我有其中一天,

我有四个可能的变量,只需要其中一个变量。我的问题是,如果查询的某些部分可能显示或不显示,我如何准备一个语句/构造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显然有办法解决这个问题,我只是不记得那是什么。

感谢。

1 个答案:

答案 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))"