2017-06-12 164 views
1

我有一个声明,我希望执行以查找包含字符串的列是否包含特定值。使用LIKE与准备好的语句

+----+------+ 
| 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 
)); 

这显然不起作用。

+1

'%'符号必须是'$ var'的一部分,不是准备好的语句的一部分。也只有你需要。 “%:a%”它包括where子句的所有其他部分 – Jens

回答

1

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

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

试试上面的代码。 还有一件事,如果你需要其中包含1的行,那么没有4条件的要求,你只能使用'%1%'来实现。

希望这会有所帮助。

+0

请勿仅添加代码。解释你做了什么以及为什么。 – Jens

+0

@Jens Ohh我的不好。 我已经更新了我的答案。 –