我有一个声明,我想执行以查找包含字符串的列是否包含某个值。
+----+------+
| 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
));
这显然不起作用。
答案 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个类似的条件。
希望这会有所帮助。