2013-04-27 15 views
25

Chcę wykonać następujące zapytanie MySQL:pdo przygotowanych sprawozdań z symboli wieloznacznych

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

Próbowałem to bezskutecznie:

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

Więc pytam, czy możliwe jest, aby użyć% wieloznacznego z przygotowanymi oświadczeniami.

/edycja

Dziękuję. Jego pracy z bindValue:

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

Jak na pierwszą próbę - zmiana ' bindParam' na 'bindValue' i włącz [zgłaszanie błędów dla PDO] (http://stackoverflow.com/questions/15990857/reference-questfully-asked-questions-abd-pdo#15990858) –

Odpowiedz

23

To może pracować z wiązania param też w następujący sposób:

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

Nie wiem, dlaczego to było dow Nie wybrano, ale pamiętaj, że to rozwiązanie działa również. :) – Sumoanand

+3

Przypuszczam, że został cofnięty, ponieważ jeśli '$ name' zawiera znak wieloznaczny, to nie jest on uniknięty. –

+1

Ja tracę swój czas z brakiem zestawu znaków = utf8 w DSN, szukam z tajskim charakterem. – ittgung

2

To może być alternatywą:

$className = '%' . $this->className . '%'; 
$query->bind_param('s', $className); 
Powiązane problemy