2014-11-20 114 views
3

我正在测试一个小型搜索功能:PDO - 在bindParam中使用LIKE

但是我遇到了一个我似乎无法解决的错误。你可以看到PDO查询这里:

$search = "test1"; //later to be changes to $_POST ['search']; 

$sql = "SELECT id, name FROM clients WHERE name LIKE CONCAT('%',:name,'%')"; 
$stm = $db->prepare ($sql); 
$stm->bindParam (":name", $search); 
$stm->execute(); 
$result = $stm->fetchAll(); 

正如你所看到的,我想要绑定的参数%:名称%从我的查询,但我不知道是否这实际上可能吗?

我revieve错误:未捕获的异常“PDOException”有消息“SQLSTATE [42000]:.....

而且我可以在错误看到‘’已经把周围的测试1%​​”测试1' %

正是我想要的可能,还是我需要做这样的事情?

$query = "SELECT id, name FROM clients WHERE name like :name order by id LIMIT 5"; 

$sql->execute(array(":name" => "%" .$search . "%")); 
+0

这个问题已经有答案了结帐的URL。 http://stackoverflow.com/questions/11068230/using-like-in-bindparam-for-a-mysql-pdo-query – jamseernj 2014-11-20 23:22:01

+2

你拼写WHERE为'WHERE'。 – duskwuff 2014-11-20 23:23:03

回答

5

使用

LIKE CONCAT('%', :name, '%') 
+0

当我看到你的回答时,我想:啊,是的!但是,我仍然遇到错误。我用你的代码更新了我的查询。难道我做错了什么? – Adnaves 2014-11-20 23:23:48

+0

@Adnaves什么是错误? – Mihai 2014-11-20 23:24:30

+1

Woops。原来这只是一个拼写错误! :) 谢谢你的帮助。 – Adnaves 2014-11-20 23:25:19