Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme bei der Benutzung von mysql_real_escape_string

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme bei der Benutzung von mysql_real_escape_string

    Hallo zusammen,
    ich habe folgendes Problem:

    Ich habe ein Textfeld in der Datenbank welches von einer PHP-Applikation gelesen und beschrieben wird. Vor dem Schreiben sichere ich die Strings mit der funktion mysql_real_escape_string ab, wenn ich ein Hochkomma in das Feld eintrage, dann erscheint ein MySQL-Fehler, welcher von der Funktion mysql_real_escape_string() ausgelöst wird:

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'k;low;new;
    Das merwürdige ist, dass dieser Fehler ausschliesslich durch mysql_real_escape_string() gemeldet wird, die Funktion mysql_query() wird Fehlerfreiausgefuehrt und die Daten werden in die Datenbank geschrieben.
    Der Fehler wird ausschließlich durch ein einfaches Hochkomma (== ') ausgelöst, weder durch Semikolons noch durch doppelte Hochkommas.

    Das Query welches ausgefuehrt wird:

    PHP-Code:
    INSERT INTO task 
    (titleprioritystatusstartdatelast_changedescriptionuser)
    VALUES ('sfdsfd'dsd', 'low', 'new', NOW(), NOW(), '
    description .. example', 'test') 
    Der Code:

    PHP-Code:
    echo '==================<br>';
    $description mysql_real_escape_string($description);
    echo 
    '==================<br>';
    $title mysql_real_escape_string($title);

    $query "INSERT INTO task (title, priority, status, startdate, last_change, description, user)";
    $query .= "VALUES ('".$title."',";
    $query .= "'".$priority."',";
    $query .= "'new',";
    $query .= "NOW(),";
    $query .= "NOW(),";
    $query .= "'".$description."',";
    $query .= "'".$_SESSION['USER_NAME']."')";

    //$sql_execute = mysql_query($query,$dz) or die(mysql_error());
    //echo $description;
    echo $query
    Die diversen echos am Ende sind nur zum Debugging. Ich möchte nicht meine DB zumüllen, der Fehler ist auch so reproduzierbar. Kennt jemand das Problem?


  • #2
    Zitat von bankkind Beitrag anzeigen
    Das Query welches ausgefuehrt wird:
    PHP-Code:
    INSERT INTO task 
    (titleprioritystatusstartdatelast_changedescriptionuser)
    VALUES ('sfdsfd'dsd', 'low', 'new', NOW(), NOW(), '
    description .. example', 'test') 
    Den Fehler sieht man sofort - beim ersten Value-Wert.

    Und das passiert, wenn man mysql_real_escape_string nicht anwendet.

    Die von dir zitierte Fehlermeldung passt allerdings nicht zu dieser Query, denn da steht nirgends 'k;low;new; drin.

    Kommentar


    • #3
      Zitat von ChrisB Beitrag anzeigen
      Den Fehler sieht man sofort - beim ersten Value-Wert.

      Und das passiert, wenn man mysql_real_escape_string nicht anwendet.

      Die von dir zitierte Fehlermeldung passt allerdings nicht zu dieser Query, denn da steht nirgends 'k;low;new; drin.
      Also mysql_real_escape_string wurde wie erwaehnt angewendet und das is die query, gerade nochmal getestet:

      Code:
      INSERT INTO task (title, priority, status, startdate, last_change, description, user)VALUES ('sdfsdhk\'dfg','low','new',NOW(),NOW(),'\r\n \r\n \r\n ','test')
      
      You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'dfg;low;
      mysql_real_escape_string hat zwar noch ein backslash gesetzt, aber das verhindert nicht die Meldung..

      Kommentar


      • #4
        was mich da wundert .. wo kommen in der fehlermeldung die Semikolons her .. du übergibst doch nur Kommas ... mein Vorschlag , lass dir den generierten SQL-String ausgeben (echo) EDIT : hast du schon, dann kopiere ihn in phpmyadmin -SQL.....

        was kommt denn dort für eine Fehlermeldung ?
        "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

        Kommentar


        • #5
          Zitat von eagle275 Beitrag anzeigen
          was mich da wundert .. wo kommen in der fehlermeldung die Semikolons her .. du übergibst doch nur Kommas ... mein Vorschlag , lass dir den generierten SQL-String ausgeben (echo) EDIT : hast du schon, dann kopiere ihn in phpmyadmin -SQL.....

          was kommt denn dort für eine Fehlermeldung ?
          Gerade getestet im mysql query browser. Das Query wird ausgefuehrt...:

          Code:
          INSERT INTO task (title, priority, status, startdate, last_change, description, user)VALUES ('sdfsdhk\'dfg','low','new',NOW(),NOW(),'\r\n \r\n \r\n ','test')
          auch die Funktion mysql_query führt das query ohne zu murren aus... nur mysql_real_escape_string nicht.

          Kommentar


          • #6
            hast du die Datenbank-verbindung schon , wenn du mysql-real-escape-string ausführst ?
            "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

            Kommentar


            • #7
              Wie eagle schon sagte, die Fehlermeldung mit den „Semikolons“ drin passt immer noch nicht zur gezeigten Query.

              Dein Fehler wird also vermutlich woanders liegen - nur wo, ist mit so minimalen Code-Schnippseln schwer zu sagen.

              Kommentar


              • #8
                Zitat von eagle275 Beitrag anzeigen
                hast du die Datenbank-verbindung schon , wenn du mysql-real-escape-string ausführst ?

                Ja, ich denke wenn nicht, dann würde die Fehlermeldung anders lauten.

                Kommentar


                • #9
                  da fällt mir doch was ein, oder so ähnlich sprach der Architekt ..

                  untersuche bitte mal deine Zeilen, die deine Query zusammenbauen auf Quote-Fehler - da kommen ja Semikolons vor ....nicht dass du unabsichtlich die Zeilenende-Semikolons mit in den Query-String aufnimmst ....

                  im übrigen präsentierst du uns hier perfekten Beispiel-Code .. aber könnte es sein, dass du bei deinem Query-String die einfachen Apostrophe ausgelassen hast ? die sind bei Mysql aber Pflicht, bei allem was keine Zahlen-Spalte ist ....
                  "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

                  Kommentar


                  • #10
                    Zitat von eagle275 Beitrag anzeigen
                    da fällt mir doch was ein, oder so ähnlich sprach der Architekt ..

                    untersuche bitte mal deine Zeilen, die deine Query zusammenbauen auf Quote-Fehler - da kommen ja Semikolons vor ....nicht dass du unabsichtlich die Zeilenende-Semikolons mit in den Query-String aufnimmst ....

                    im übrigen präsentierst du uns hier perfekten Beispiel-Code .. aber könnte es sein, dass du bei deinem Query-String die einfachen Apostrophe ausgelassen hast ? die sind bei Mysql aber Pflicht, bei allem was keine Zahlen-Spalte ist ....
                    AHHHH ich habs...

                    undzwar habe ich zum Debugging eine logging Funktion, welche jeden Request in die DB schreibt und damit auch Dinge wie POST, GET und SESSION Variablen. Da diese Variablen ($title und $description) nun aus einer POST Variable kamen und ich vergessen habe mysql_real_escape_String auch an diesen auszufuehren ist es passiert dass die meldung geschmissen wurde.

                    Das bedeutet das nicht mysql_real_escape_string die meldung geschmissen hat, sondern in meiner anderen Funktion yum Logging das ausfuehren von mysql_query zum Fehler geführt hat. Das erklärt auch, warum die Daten trotzdem in die DB geschrieben wurden...

                    Kommentar


                    • #11
                      na denn ,, herzlichen Glückstrumpf .. oder so ähnlich
                      "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

                      Kommentar

                      Lädt...
                      X