2013-04-27 114 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();