$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

    Einmal editiert, zuletzt von cottton (30. Juni 2015 um 23:02)

  • 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!