是否有MySql WHERE子句的通配符运算符?

时间:2017-08-14 19:34:28

标签: php mysql pdo

以下通过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}})?

2 个答案:

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

More Info on the LIKE clause

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