Frage

Der Versuch, diese Art der Sache zu tun ...

WHERE username LIKE '%$str%'

... aber mit gebundenen Parametern zu Prepared Statements in PDO. z.

$query = $db->prepare("select * from comments where comment like :search");
$query->bindParam(':search', $str);
$query->execute();

Ich habe zahlreiche Permutationen von einfachen Anführungszeichen und% Zeichen versucht, und es ist nur mit mir bekommen Kreuz.

Ich scheine Ringen mit diesem an einem gewissen Punkt zu erinnern, bevor aber ich kann keine Referenzen nicht finden. Wer weiß, wie (wenn?) Sie diese schön in PDO mit benannten Parametern tun?

War es hilfreich?

Lösung

Ah. Gefunden einen Kommentar zu php.net, die mich an die Antwort erinnert; Sie müssen Ihren Wert Wildcard vor dem bindParam ausgewertet wird, und sich keine Sorgen darüber zu zitieren. So zum Beispiel, das funktioniert gut:

$str = "%$str%";
$query = $db->prepare("select * from comments where comment like :search");
$query->bindParam(':search', $str);
$query->execute();

Andere Tipps

5 Jahre später, falls jemand stolpert auf diesem, gibt es eine alternative Methode, die ich entdeckt habe. Die akzeptierte Lösung war nicht wirklich möglich für meine Situation, aber diese Methode scheint auch die Aufgabe zu erledigen:

$query = $db->prepare("select * FROM table WHERE field LIKE CONCAT('%',:search,'%')");
$query->bindParam(':search', $str);
$query->execute();

Ich bin nicht sicher, ob es der Aufruf der Funktion CONCAT aufgrund der Overhead-Hit eine Leistung sein, aber ich wollte dies als eine Option entlang passieren. Hoffentlich wird es jemand helfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top