[SQL] Wie kann man das ' bei variablen benutzen?

Dieses Thema im Forum "Webentwicklung" wurde erstellt von BladeFire, 23. September 2012 .

Schlagworte:
  1. 23. September 2012
    Wie kann man das ' bei variablen benutzen?

    Hallo,

    Wie kann man das ' bei variablen benutzen?

    Das konkrete beispiel sieht so aus:
    Spoiler
    if($stmt=$mysqli->query("SELECT * FROM benutzer WHERE passwort = ? and benutzer = ? "));
    {
    $stmt->bind_param("ss",$_POST["name"],$_POST["passwort"]);
    $stmt->execute();


    $stmt->bind_result($id, $vorname, $benutzer, $passwort, $email);
    $stmt->execute();
    $stmt->fetch();

    echo $vorname;



    }
    Als ich es ohne $stmt->bind_param gemacht habe und den namen und das passwort direkt eingegeben habe hat es nur funktioniert wie ich das passwort und den benutzernamen mit ' ' gekenzeichnet habe. Wie kann man eine Variable so kennzeichnen?

    Mfg Simon
     
  2. 23. September 2012
    AW: Wie kann man das ' bei variablen benutzen?

    Was genau meinst du?

    Code:
    if($stmt=$mysqli->query("SELECT * FROM benutzer WHERE passwort = '".$pass."' and benutzer = ? "));
    
     
  3. 23. September 2012
    AW: Wie kann man das ' bei variablen benutzen?

    Ich hoffe der Code ist nur ein "Beispiel-Code".
    Ansonsten würde ich DRINGEND raten die Variablen, welche die via "$_POST" einliest, zu filtern.
    Sonst besteht die Gefahr einer SQL-injection.

    Empfehlen könnte ich noch das Framework "PEAR".
    Damit kann man den DB Zugriff einfach und sicher gestalten.
     
  4. 23. September 2012
    Zuletzt bearbeitet: 23. September 2012
    AW: Wie kann man das ' bei variablen benutzen?

    ich hatte mich verschrieben und habe query benutzt statt prepare. (habs davor aber schon richtig probiert (hab das problem schon 3 Stunden lang bearbeitet aber einfach keinen richtigen lösungsweg gefunden.)


    Ich meine es So. Eine Variable wird übergeben wie kann ich den wert dieser Variable mit einen ' ' schützen?

    ________________________________
    Edit:

    Ich hab das problem auf einen anderen aber meiner meinung nach umständlichern weg gelöst

    if($ergebnis=$mysqli->query("SELECT * FROM benutzer WHERE passwort = '" . $passwort . "' and benutzer = '" . $name . "' "));
    {





    $ausgeben=$ergebnis->fetch_array();

    print_r($ausgeben);

    Wie kann man das Problem bzw kann man es mit bind_param lösen?
    :

    if($stmt=$mysqli->prepare("SELECT * FROM benutzer WHERE passwort = ? and benutzer = ? "));

    $stmt->bind_param("ss",$variable,$variable2);
    $stmt->execute();

    $stmt->bind_result($ausgabe1,$ausgab2)
    $stmt->execute();

    echo $ausgabe1
    mysqli->close

    _________________________________________________________________
    Nein das ist kein beispielcode gewesen. die sicherheit war aber auch noch nicht so wichtig solongs nicht funzt^^ du meinst mit htmlspecialchars filtern?
     
  5. 23. September 2012
    AW: Wie kann man das ' bei variablen benutzen?

    Du drückst dich zwar nicht ganz verständlich aus, aber habe folgendes gefunden:
    PHP: mysqli::real_escape_string - Manual
     
  6. 23. September 2012
    AW: Wie kann man das ' bei variablen benutzen?

    Es funktioniert nicht. Ich verstehe es selbst nicht warum es nicht ohne ' funktioniert.
     
  7. 23. September 2012
    AW: Wie kann man das ' bei variablen benutzen?

    Poste bitte mal deine Fehlermeldung(en).

    PHP: mysqli: repare - Manual
    PHP:
    $mysqli  = new  mysqli ( "localhost" "my_user" "my_password" "world" );


    if ( mysqli_connect_errno ()) {
        
    printf ( "Connect failed: %s\n" mysqli_connect_error ());
        exit();
    }

    $city  "Amersfoort" ;


    if ( $stmt  $mysqli -> prepare ( "SELECT District FROM City WHERE Name=?" )) {

        

        
    $stmt -> bind_param ( "s" $city );

        

        
    $stmt -> execute ();

        

        
    $stmt -> bind_result ( $district );

        

        
    $stmt -> fetch ();

        
    printf ( "%s is in district %s\n" $city $district );

        

        
    $stmt -> close ();
    }


    $mysqli -> close ();
    Halte dich an die Beispiele von php.net und es sollte funktionieren, was auch immer du vorhast
     
  8. 23. September 2012
    Zuletzt bearbeitet: 23. September 2012
    AW: Wie kann man das ' bei variablen benutzen?

    Ich blick jetzt nicht mehr durch. Auf einmal Funktioniert alles wieder mit diesem code
    PHP:
    if( $stmt = $mysqli -> prepare ( "SELECT * FROM benutzer WHERE passwort = ? and benutzer = ? " ));
    {
    $stmt -> bind_param ( "ss" , $_POST [ "passwort" ], $_POST [ "name" ]);
    $stmt -> execute ();

    $stmt -> bind_result ( $id $vorname $benutzer $passwort $email );



    $stmt -> fetch ();

    echo 
    $vorname ;



    include(
    "einfuegen/rmenue.php" );

    }
    Ich bin mir aber Sicher das ich das schon mal genau so gemacht habe. mhm. naja auf Jeden Fall Danke euch Allen

    ________

    Ich denke ich weis wieso. als es mal wegen eines anderen Fehlers nicht funktioniert ist habe ich benutzer und passwort vertauscht um naja ein wenieg herumzuoprobieren. bei dem bind_param hab ich sie aber gleich gelassen.
     
  9. 23. September 2012
    AW: Wie kann man das ' bei variablen benutzen?

    Schau dir am besten mal mysqli_error an, dann kannst du deinen Code in Zukunft schneller verbessern, weil du damit weißt, wo das Problem liegt (kriegst ja auch SQL-Fehlermeldungen)
     
  10. 23. September 2012
    Zuletzt bearbeitet: 23. September 2012
    AW: Wie kann man das ' bei variablen benutzen?

    Kleine Anmerkung für diejenigen die hier nach SQL Injection und Sicherheit schreien: Er verwendet Prepared Statements und Parameter Binding. Bitte gebt ihm doch da nicht solche Hinweise wie "real_escape_string" etc... Völliger Schwachsinn.

    Aber um auch mal eine Antwort zu der Frage zu geben die hier wohl keiner richtig verstanden hat:

    Ohne Parameter Binding (bindParam) wird das SQL Statement genauso wie du es schreibst ausgeführt. Damit würde folgender Code (ungeachtet irgendwelcher Sicherheitsbedenken) zu dem von dir beschriebenen Fehler führen, dass es nur funktioniert wenn du deinen Benutzername mit eingeschlossenen Hochkommas eingibst (und dein Passwort).
    Code:
    $mysqli->query("SELECT * FROM benutzer WHERE passwort = $_POST['passwort'] and benutzer = $_POST['benutzer']")
    SQL Statement welches den Server erreicht (bsp):
    Code:
    SELECT * FROM benutzer WHERE passwort = extremsicher and benutzer = hanspeter
    Da fehlen nun aber die Hochkommas um Passwort und Benutzer => Folge: Es geht nicht

    Sobald du prepared Statments und Parameter Binding benutzt gibst du ja explizit an dass dein 1. Parameter vom Typ "String" ist. Entsprechend kümmert sich "bindParam" darum dass der Wert in Hochkommas gesetzt wird (vereinfacht ausgedrückt - In Wirklichkeit funktioniert das anders). Daher funktioniert das eine und das andere nicht.
     
  11. 23. September 2012
    AW: Wie kann man das ' bei variablen benutzen?

    Danke.

    Es hat zwar schon früher geklappt aber erst jetzt habe ich es richtig begriffen.


    Mfg

    -Simon
     
  12. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.