我有一个要执行的语句来查找包含字符串的列是否包含某个值。

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

假设我希望找到st包含1的所有行,我将使用以下where条件:
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
));

这显然行不通。

最佳答案

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

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

关于mysql - 将LIKE与已准备好的语句一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44493226/

10-11 02:48
查看更多