Hoffe, jemand wird mir helfen, wie ich einen Parameter in mysqli binde, wenn ein Platzhalter mit mehreren Zeichen neben dem Variablenwert stehen muss. Ich habe festgestellt, dass es bei der Erstellung einer SQL-Anweisung wie folgt für mich funktioniert hat:
$sql = "SELECT item_title FROM item WHERE item_title LIKE '%$title%'";
Ich habe jedoch versucht, die Variable nach demselben Muster zu binden, und festgestellt, dass dies fehlgeschlagen ist. Sie verwendeten diesen Code:
$sql = "SELECT item_title FROM item WHERE item_title LIKE '%?%'";
Es hat diesen Fehler ausgelöst:
Warnung: mysqli_stmt_bind_param() [function.mysqli-stmt-bind-param]: Die Anzahl der Variablen stimmt nicht mit der Anzahl der Parameter in der vorbereiteten Anweisung in Programmname online überein……
Kann mir jemand sagen, wie dieses Problem behoben wird? Danke.
Probieren Sie es aus LIKE ? dann bind_param("%".$string."%") oder LIKE '%' || ? || '%'.
– Passant
14. Februar 2013 um 9:56 Uhr
Sie können nur Datenliterale binden, keine beliebigen Abfrageteile.
Bereiten Sie also zuerst Ihr Literal vor
$var = "%$var%";
$sql = "SELECT item_title FROM item WHERE item_title LIKE ?";
danke für die Antwort. Ich habe dieselbe Variable zweimal in der Where-Klausel in meiner Abfrage verwendet, so – WHERE (s2.subject_name LIKE ‘%$keyword%’ OR c.city_name LIKE ‘%$keyword%’ ). Dann können Sie mir sagen, wie ich diese Variablen binde.
– TNK
14. Februar 2013 um 10:20 Uhr
@TharangaNuwan Ich habe die Antwort gemäß Ihren Kommentaren aktualisiert, siehe unten
– Minesch
14. Februar 2013 um 10:34 Uhr
Hinterlässt das nicht eine Sicherheitslücke. Insbesondere wenn $var = ‘hello%world’, haben Sie ein unbeabsichtigtes Platzhalter-Token.
– danielson317
4. Juli 2018 um 20:11 Uhr
Minesch
Sie können folgendermaßen vorgehen:
$sql = "SELECT item_title FROM item WHERE item_title LIKE ? ";
$sql="SELECT item_title FROM item WHERE item_title LIKE concat ('%',?,'%') ";
haben ein Fragezeichen pro Bindungsvariable. Zum Beispiel prepare(SELECT item_title FROM item WHERE item_title LIKE ? and name2 like ? and …) Das Schöne an vorbereiteten Anweisungen ist, dass Sie sich keine Gedanken über das Zitieren der Variablen machen müssen.
Binden Sie dann alle Parameter wie bind_param(“ss…”, $param1, $param2, ….);
9952000cookie-checkPHP bindet einen Platzhalter [duplicate]yes
Probieren Sie es aus
LIKE ?
dannbind_param("%".$string."%")
oderLIKE '%' || ? || '%'
.– Passant
14. Februar 2013 um 9:56 Uhr