2013-04-27 14 views
25

ich die folgende MySQL-Abfrage ausgeführt werden soll:pdo vorbereitete Anweisungen mit Wildcards

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

ich dies ohne Erfolg versucht:

$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(); 

Also frage ich Sie, ob es möglich ist, die% Platzhalter zu verwenden mit vorbereiteten Aussagen.

/bearbeiten

Vielen Dank. Seine Arbeit mit bindValue:

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

Was Ihre ersten Versuch - Änderung ' bindParam' an 'bindValue' und wiederum [error reporting for PDO] (http://stackoverflow.com/questions/15990857/reference-frequently-asked-questions-about-pdo#15990858) –

Antwort

23

Es kann in folgenden Weise zu mit bind param arbeiten:

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

Nicht sicher, warum dow n abgestimmt, aber bitte beachten Sie, dass diese Lösung auch funktioniert. :) – Sumoanand

+3

Ich denke, es wurde downvoted, denn wenn Ihr $ name einen Platzhalter selbst enthält, wird es nicht maskiert. –

+1

Ich verschwende meine Zeit mit habe keinen charset = utf8 in der DSN, suche ich mit Thai Charakter. – ittgung

2

Dies ist eine Alternative sein könnte:

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