使用LIKE和准备好的语句

时间:2017-06-12 07:04:29

标签: mysql sql pdo

我有一个声明,我想执行以查找包含字符串的列是否包含某个值。

+----+------+
| id |  st  |
+----+------+
|  0 | 2183 |
|  1 | 5820 |
|  2 | 2984 |
| ...|  ... |
+----+------+

假设我希望查找st包含1的所有行,我会在条件中使用这些行:

WHERE st LIKE "%1%"
OR st LIKE "1%"
OR st LIKE "1"
OR st LIKE "%1"

但我如何在准备好的声明中这样做?

$ps = $db->prepare("
    SELECT id
        FROM table
        WHERE st LIKE "%:a%"
        OR st LIKE ":a%"
        OR st LIKE ":a"
        OR st LIKE "%:a"
");
$ps->execute(array(
    ':a' => $var
));

这显然不起作用。

2 个答案:

答案 0 :(得分:1)

%符号必须是$var的一部分,而不是准备好的声明的一部分。你只需要%:a%它包含where子句的所有其他部分

$ps = $db->prepare("
    SELECT id
        FROM table
        WHERE st LIKE :a
");
$ps->execute(array(
    ':a' => "%".$var."%"
));

答案 1 :(得分:1)

ps = $db->prepare("
    SELECT id
        FROM table
        WHERE st LIKE :a");
$ps->execute(array(
    ':a' => "%".$var."%"
));

尝试以上代码。 还有一件事,如果你需要包含1的行,那么你就不能使用'%1%'来实现4个类似的条件。

希望这会有所帮助。