我有四个可能的变量,只需要其中一个。我的问题是,如果查询的某些部分可能显示或不显示,我该如何准备语句/构造 SQL 查询。
我猜是这样的:
sql = "SELECT * FROM dogs WHERE name = ?"
if(isset($dogid)) {
sql .= "AND WHERE id = ?";
}
}
if(isset($dogcolour)) {
sql .= "AND WHERE colour = ?";
}
我的大脑完全崩溃了,我认为必须有一种比使用 $dogID = "true"; 这样的东西更好的方法来准备它。在每个 if 中,然后在最后用一堆 if 语句将其绑定(bind)。
最佳答案
好吧,我会定义一些空值,然后检查数据库中的所有内容。
$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 或 $colour 变量为 0,则在 where 语句中执行 1 = 1
(witch 始终为 true)。应该有可能将 NULL 值传递给 mysqli,但是对我来说它不起作用,如果它起作用则可以简化查询。
$sql = "SELECT * FROM dogs WHERE name = (IFNULL(?, name)) AND colour = (IFNULL(?, colour))"
关于php - MySQLi 准备的条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27930690/