$mysqli->prepare LIKE

  • Moin,


    eine kleine Frage, ich möchte gerne aus meiner Suche



    PHP
    if ($KdSuche) {			
    	$stmt = $mysqli->prepare($select . " WHERE kd_firma =?" );
    	$stmt->bind_param("s", $KdSuche);
    
    }



    ein LIKE machen, dass ich nicht genau den Namen schreiben muss. Dazu benötige ich ja das LIKE %WERT% Nur die Frage ist, wie setzte ich das LIKE bei $mysqli->prepare da arbeite ich ja mit =?

  • Hast Du schon richtig erkannt:

    PHP
    // --> falsch =) $stmt = $mysqli->prepare($select . " WHERE kd_firma LIKE '%?' " ); // oder LIKE '?%' oder LIKE '%?%'
    
    
    
    
    // richtig:
    $stmt = $mysqli->prepare($select . " WHERE kd_firma LIKE ? " );  
    $stmt->bind_param("s", '%' . $KdSuche); // oder $KdSuche . '%' oder '%' . $KdSuche . '%'


    Das ? wird beim Ausführen mit dem Wert ersetzt. Wo das liegt, ist erstmal egal.
    ob es dort sein darf ist dann zweitens


    EDIT: sorry - müde, blödsin erzählt -- Bsp geändert

  • Danke für deine Antwort, wenn ich deinen Code benutzt, erhalte ich folgende Meldung:


    Zitat

    Fatal error: Cannot pass parameter 2 by reference


    Es muss scheinbar erst eine Variable angelegt werden, die ich dann in bind_parmas verwenden kann, so klappt es:


    PHP
    $param = '%'.$KdSuche.'%';
    $stmt = $mysqli->prepare($select . " WHERE kd_firma LIKE ?" );
    $stmt->bind_param("s", $param);
  • Klingt logisch.
    bind_para übernimmt die var offensichtlich als Ref
    in etwa:
    bind_para($types, &$para)


    Die Verkettung von verschiedenen Werten kann ja nicht als Ref übernommen werden.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!