2010-10-25 82 views
5

为了使用PDO进行LIKE搜索,我需要在传递参数之前将%添加到参数中。如何使用PDO进行LIKE搜索?

这工作:

$qry = ' 
    SELECT product_id 
    FROM cart_product 
    WHERE product_manufacturer_num LIKE :search_string 
'; 
$sth = $this->pdo->prepare($qry); 
$sth->execute(array("search_string"=>'%'.$search_string.'%')); 

对我来说,这种感觉更像是一个黑客,是否有这样做的一个更正式的方式?

+0

重复的:http://stackoverflow.com/questions/583336/how-do-i-create-a-pdo-parameterized-query-with-a-like-statement-in-php/7357296#7357296 – Kzqai 2011-09-09 04:56:34

回答

4

这很好。它对我来说并不感觉像是黑客。

difficulty出现在您希望允许在搜索字符串中使用文字%_字符而不用作通配符的情况。

+0

我认为绑定参数的很大一部分是为PDO/SQL转义为%或_的东西......所以我很困惑。 – RonLugge 2012-07-18 05:13:25

+1

@RonLugge:PDO执行必要的转义/参数化操作,以便将字符串文字导入数据库。问题在于'LIKE'模式语法是一个独立的层,位于SQL字符串文字之上。 MySQL通过对两个层使用相同的转义字符来混淆这个问题,但它们在概念上是无关联的,在完全不同的层次上实现。 – bobince 2012-07-18 09:02:19