2012-06-20 9 views
27

ich Probleme bei der Umsetzung der LIKE in PDOLIKE Abfrage in PDO implementieren

Ich habe diese Abfrage leite:

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

Ich habe die $var1 und $var2 sie enthalten beide die Worte, die ich gesucht werden soll, mein PDO funktioniert gut, da einige meiner Fragen SELECTINSERT sie arbeiten, es ist nur, dass ich nicht in LIKE hier in PDO vertraut bin.

Das Ergebnis wird nicht zurückgegeben. Ist meine $query syntaktisch korrekt?

Antwort

61

Sie die % Zeichen in den $params enthalten müssen, 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 man sich die generierte Abfrage aussehen würde in Ihr vorheriger Code, Sie würden etwas wie SELECT * FROM tbl WHERE address LIKE '%"foo"%' OR address LIKE '%"bar"%' sehen, weil die vorbereitete Anweisung Ihre Werte innerhalb einer bereits in Anführungszeichen gesetzten Zeichenkette zitiert.

+0

+1 für die Erklärung .. Aber ich glaube nicht, dass es eine Möglichkeit gibt, die generierte Abfrage zu betrachten. Gibt es so etwas? – Vignesh

+0

Konnte das nicht für mein Leben herausfinden und ich hatte alles vergessen. Tolle Antwort. Vielen Dank! – b3tac0d3

5

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

LIKE ? 

Und in den Variablen: %string%

+0

Hmm, Verzeihung, aber ich bin mir nicht ganz sicher, wie zu implementieren, was Sie gerade vorgeschlagen haben. –

+0

Ich bin auf Handy, aber ich werde versuchen, das Beste zu erklären, was ich kann. Siehe meine Bearbeitung. –

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

können Sie unter Beispiel sehen

$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, dass es funktionieren wird.

1

Nutzen Sie einfach die folgenden Schritte aus:

$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)) { ... } 
+0

Dies ist langsamer als das direkte Hinzufügen der% zu den verknüpften Variablen. – CristiC