如何在PDO中使用绑定参数进行模糊搜索?

时间:2008-09-13 19:09:02

标签: php sql pdo

尝试做这类事......

WHERE username LIKE '%$str%'

...但是在PDO中使用绑定参数来准备语句。 e.g:

$query = $db->prepare("select * from comments where comment like :search");
$query->bindParam(':search', $str);
$query->execute();

我尝试过多次单引号和%符号的排列,它只是与我交叉。

我似乎记得曾经在某些时候与此摔跤,但我找不到任何参考资料。有没有人知道如何(如果?)你可以在PDO中使用命名参数做得很好吗?

2 个答案:

答案 0 :(得分:15)

阿。在php.net上发现了一条评论,让我想起了答案;在评估bindParam之前,您需要对您的值进行通配符,而不必担心引用它。所以例如这很好用:

$str = "%$str%";
$query = $db->prepare("select * from comments where comment like :search");
$query->bindParam(':search', $str);
$query->execute();

答案 1 :(得分:4)

5年后,如果其他人偶然发现这种情况,我发现了一种替代方法。对于我的情况,接受的解决方案并不可行,但这种方法似乎也完成了工作:

$query = $db->prepare("select * FROM table WHERE field LIKE CONCAT('%',:search,'%')");
$query->bindParam(':search', $str);
$query->execute();

由于调用CONCAT函数的开销,我不确定是否会出现性能损失,但我想将此作为选项传递。希望它会帮助别人。