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 SELECT
INSERT
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?
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.
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%
$query = "SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?";
$params = array("%$var1%", "%$var2%");
$stmt = $handle->prepare($query);
$stmt->execute($params);
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.
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)) { ... }