11

试图做这样的事情...

WHERE username LIKE '%$str%'

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

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

我已经尝试了许多单引号和 % 符号的排列,这让我很反感。

我似乎记得以前在某个时候与这个摔跤,但我找不到任何参考资料。有谁知道如何(如果?)在 PDO 中使用命名参数很好地做到这一点?

4

2 回答 2

15

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

$str = "%$str%";
$query = $db->prepare("select * from comments where comment like :search");
$query->bindParam(':search', $str);
$query->execute();
于 2008-09-13T19:21:09.240 回答
4

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

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

我不确定由于调用CONCAT函数的开销是否会影响性能,但我想将其作为一个选项传递。希望它会帮助某人。

于 2013-03-13T05:21:57.127 回答