2013-04-27 112 views
25

准备好的发言我想执行下列MySQL查询:PDO使用通配符

SELECT * FROM `gc_users` WHERE `name` LIKE '%anyname%' 

我想这没有成功:

$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); 
$stmt->bindParam(':name', "%" . $name . "%"); 
$stmt->execute(); 

$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE '%:name%'"); 
$stmt->bindParam(':name', $name); 
$stmt->execute(); 

所以我问你,如果它是可以使用%通配符有准备好的陈述。

/编辑

谢谢。它与bindValue工作:

$name = "%$name%"; 
$query = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` like :name"); 
$query->bindParam(':name', $name); 
$query->execute(); 
+3

关于你的第一次尝试 - 改变' bindParam'到'bindValue'并打开[PDO错误报告](http://stackoverflow.com/questions/15990857/reference-frequently-asked-questions-about-pdo#15990858) – 2013-04-27 18:48:45

回答

23

它可以太以下方式与绑定PARAM工作

$className = '%' . $this->className . '%'; 
$query->bind_param('s', $className); 
+0

不知道为什么这一直是dow ñ投票,但请注意这种解决方案也适用。 :) – Sumoanand 2013-04-27 19:37:26

+3

我想它已经downvoted,因为如果你的'$ name'本身包含通配符,它​​不会被转义。 – 2013-10-15 22:38:47

+1

我浪费时间在DSN中没有字符集= utf8,我用泰文字符搜索。 – ittgung 2016-05-16 10:12:41

2

这可能是一个另类:

$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); 
$stmt->bindValue(':name', '%' . $name . '%'); 
$stmt->execute();