wake-up-neo.com

LIKE-Abfrage in PDO implementieren

Ich habe Probleme bei der Implementierung von LIKE in PDO

Ich habe diese Frage:

$query = "SELECT * FROM tbl WHERE address LIKE '%?%' OR address LIKE '%?%'";
$params = array($var1, $var2);
$stmt = $handle->prepare($query);
$stmt->execute($params);

Ich habe überprüft, ob $var1 Und $var2 Beide Wörter enthalten, nach denen ich suchen möchte. Mein PDO funktioniert einwandfrei, da einige meiner Abfragen SELECTINSERT funktionieren Es ist nur so, dass ich in LIKE hier in PDO nicht vertraut bin.

Das Ergebnis wird nicht zurückgegeben. Ist mein $query Syntaktisch korrekt?

35
Leandro Garcia

Sie müssen das % unterschreibt im $params, nicht in der Abfrage:

$query = "SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?";
$params = array("%$var1%", "%$var2%");
$stmt = $handle->prepare($query);
$stmt->execute($params);

Wenn Sie sich die generierte Abfrage in Ihrem vorherigen Code ansehen, sehen Sie etwa SELECT * FROM tbl WHERE address LIKE '%"foo"%' OR address LIKE '%"bar"%', weil die vorbereitete Anweisung Ihre Werte in einer bereits zitierten Zeichenfolge in Anführungszeichen setzt.

73

Nein, Sie müssen keine vorbereitenden Platzhalter angeben. Fügen Sie außerdem die% -Markierungen in Ihre Variablen ein.

LIKE ?

Und in der Variablen: %string%

5
Madara Uchiha
$query = "SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?";
$params = array("%$var1%", "%$var2%");
$stmt = $handle->prepare($query);
$stmt->execute($params);
4
Miqdad Ali

Unten sehen Sie ein Beispiel

$title = 'PHP%';
$author = 'Bobi%';
// query
$sql = "SELECT * FROM books WHERE title like ? AND author like ? ";
$q = $conn->prepare($sql);
$q->execute(array($title,$author));

Hoffe es wird funktionieren.

2
Dinesh Goyal

Verwenden Sie einfach Folgendes:

$query = "SELECT * FROM tbl WHERE address LIKE CONCAT('%', :var1, '%')
            OR address LIKE CONCAT('%', :var2, '%')";

$ar_val = array(':var1'=>$var1, ':var2'=>$var2);
if($sqlprep->execute($ar_val)) { ... }
2
Grant