SQL BindParam Problem

  • Guten Tag,


    Brauche Hilfe bei einem Statement in Sql.
    Ich möchte es so einstellen das , wenn man ein Buchstaben eingibt z.B ( s ) , dass dann alle Emails die mit S anfangen angezeigt werden, Ohne BindParam funktoniert es möchte es aber mit BindParam machen wegen der Sicherheit. Wenn ich ein Buchstabe eingebe erscheint kein Datensatz.


  • möchte es aber mit BindParam machen wegen der Sicherheit


    :thumbup: top!


    So sollte es laufen:


    Du kanns allerdings auch ohne bindParam:

    PHP
    $sql = "SELECT id, email FROM daten WHERE email LIKE :idtag"; // '?'% entfernt, placeholder hinzugefügt
    		// parameter array für ->execute() vorbereiten:
    		$para = array(
    			'idtag' => trim((string)$_POST['id-tag']) . '%'; 
    		);
    		$stmt = $verbindung->prepare($sql);  
    		$stmt->execute($para); // para mit an execute übergeben


    Was passiert hier:
    Du übergibst (ob per bindParam oder execute($para)) einen String myemail@or.whatever%.
    PDO setzt diesen String "intern" so ein:

    SQL
    SELECT id, email FROM daten WHERE email LIKE '%myemail@or.whatever'


    Warum?
    Weil alles, was Du per execute($para) oder bindParam($key, $val, PDO::PARAM_STR) übergibst, zwischen Anführungszeichen gesetzt wird -- also al String eingesetzt wird.
    Will man etwas anderes als einen String in die Query schreiben lassen (zB für LIMIT :x :y), dann muss man
    - bindParam() nutzen
    - und bindParam() sagen, was genau man vorhat: zB bindParam($key, $val, PDO::PARAM_INT) -- einen int


    Hoffe das hilft.

  • Vorweg: sorry, hab nen Fehler drin gehabt: das % muss am Ende angehangen werden -- so wie Du es richtig gemacht hast =)


    Du prüfst, ob der Wert in $arr größer ist, als 0. 8|
    Willst aber sicherlich prüfen, ob:

    PHP
    if(count($arr) < 1) { echo "Kein Datensatz gefunden"; } // weniger als 1


    Oder aber noch einfacher:

    PHP
    if(empty$arr)) { echo "Kein Datensatz gefunden"; } // empty wäre zB NULL, 0, '', array(), ...
  • @cotton: Habe es auch so gemacht bevor du es am Ende schon gesetzt hast (Das Prozentzeichen). Trotzdem zeigt er mir immer noch keine Datensätze an.
    Danke für die Hilfe der Abfrage ob ein Datensatz gefunden wurde oder nicht. :)

  • wolf das geht auch ohne =)
    Hat den Vorteil, dass man bei dynamischen Scripten den $key nicht immer mit einem : verbinden muss (':' . $key).


    @string97 dann sieh am besten mal nach, was für Queries am Server ankommen.
    Query log in table:


    http://stackoverflow.com/a/14404000/3411766

Jetzt mitmachen!

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