以下通过PHP的MySql SELECT成功返回包含变量$my_color = "red";
$a = $pdo->prepare("SELECT * FROM my_table WHERE color=:color");
$a->bindParam('color', $my_color);
$a->execute();
$data = fetchAll(PDO::FETCH_ASSOC);
指定颜色的行。
WHERE = *
我还想执行不依赖于特定颜色的搜索。我可以使用if-then块来使用不同的SELECT模式,但是......
问题:MySQL是否能够将WHERE条件设置为转换为"接受任何内容" ({{1}})?
答案 0 :(得分:2)
您可以使用LIKE子句,输入为通配符,如下所示:
$my_color = "%";
$a = $pdo->prepare("SELECT * FROM my_table WHERE color LIKE :color");
$a->bindParam('color', $my_color);
$a->execute();
$data = fetchAll(PDO::FETCH_ASSOC);
答案 1 :(得分:1)
使用LIKE
代替=
。如果该值不包含任何通配符,则LIKE
执行完全等效检查。但是,您可以使用%
作为通配符来匹配任何内容。所以:
$color = '%';
$a = $pdo->prepare("SELECT * FROM my_table WHERE color LIKE :color");
$a->bindParam('color', $my_color);
$a->execute();
$data = fetchAll(PDO::FETCH_ASSOC);
但是,更好的选择可能是将逻辑放在PHP而不是SQL中。
if ($color) {
$a = $pdo->prepare("SELECT * FROM my_table WHERE color=:color");
$a->bindParam('color', $my_color);
} else {
$a = $pdo->prepare("SELECT * FROM my_table");
}
$a->execute();
有关从多个表单输入动态构建WHERE
子句的更一般技术,请参阅https://stackoverflow.com/a/28909923/1491895。