PHP bindet einen Platzhalter [duplicate]

Lesezeit: 2 Minuten

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

PHP bindet einen Platzhalter duplicate
Minesch

Sie können folgendermaßen vorgehen:

$sql = "SELECT item_title FROM item WHERE item_title LIKE ? ";

und dann

$title_new =  '%'.$title.'%';
mysqli_stmt_bind_param($stmt, 's', $title_new);    

Basierend auf dem Kommentar des Benutzers aktualisiert

Um unten SQL zu implementieren

 s2.subject_name LIKE '%$keyword%' OR c.city_name LIKE '%$keyword%' 

Verwenden Sie die folgende MySqli-Anweisung s2.subject_name LIKE ? ODER c.city_name LIKE ?

 $keyword = '%'.$keyword.'%';
 mysqli_stmt_bind_param($stmt, 'ss', $keyword, $keyword);

   $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, ….);

995200cookie-checkPHP bindet einen Platzhalter [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy