2017-06-12 163 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我的不好。 我已經更新了我的答案。 –