Tim: mysql_real_escape_string() Rückgabe leer

hallo,

ich versuche für eine Website alle SQL Querys gegen SQL Injection abzusichern.
Wenn ich jedoch die Funktion mysql_real_escape_string() mit irgendeinem String aufrufe ist der Rückgabewert immer leer.

die Verbindung zu MySQL Datenbank hab ich über eine Klasse realisiert und habe deshalb auch probiert, die Connection aus der Klasse zu übergeben:

mysql_real_escape_string("teststring",$mydbclass->getCon())
aber auch das gibt nur ein leeres Ergebnis zurück.

kann mir jemand erklären woran das liegt?

Vielen Dank,
Tim Friedrich

  1. $sicher = mysql_real_escape_string("teststring",$mydbclass->getCon()); echo"$sicher";

    DU musst es natürlich in eine Var schreiben oder in der Query verwenden

    Gruß Rainer

    1. $sicher = mysql_real_escape_string("teststring",$mydbclass->getCon()); echo"$sicher";

      DU musst es natürlich in eine Var schreiben oder in der Query verwenden

      danke aber ich habe ein echo davor.

  2. Tach!

    Wenn ich jedoch die Funktion mysql_real_escape_string() mit irgendeinem String aufrufe ist der Rückgabewert immer leer.

    Dann machst du sicherlich was falsch. Zeig mal bitte, wie du feststellst, dass das Ergebnis leer ist.

    die Verbindung zu MySQL Datenbank hab ich über eine Klasse realisiert und habe deshalb auch probiert, die Connection aus der Klasse zu übergeben:

    Warum nimmst du eigentlich nicht entgegen der Empfehlung des PHP-Handbuchs (englische Ausgabe) die mysqli-Extension? Dann hättest du bereits eine Klasse, die du verwenden und auch erweitern kannst und muss nicht die herkömmlichen Funktionen kapseln.

    dedlfix.

    1. Tach!

      Wenn ich jedoch die Funktion mysql_real_escape_string() mit irgendeinem String aufrufe ist der Rückgabewert immer leer.

      Dann machst du sicherlich was falsch. Zeig mal bitte, wie du feststellst, dass das Ergebnis leer ist.

      ich verwende folgenden code:
      echo "INSERT INTO testtabelle VALUES (".mysql_real_escape_string(ID2,$mydbclass->connection).", ".ID2.")";

      heraus kommt dann folgendes:
      INSERT INTO testtabelle VALUES (, 10)

      1. Hallo,

        ich verwende folgenden code:
        echo "INSERT INTO testtabelle VALUES (".mysql_real_escape_string(ID2,$mydbclass->connection).", ".ID2.")";

        heraus kommt dann folgendes:
        INSERT INTO testtabelle VALUES (, 10)

        dann ist die Konstante ID2, die du als Funktionsargument übergibst, entweder ein Leerstring oder nicht definiert. Im zweiten Fall sollte PHP sich außerdem mit einer Notice beschweren, falls du diese Meldungen nicht unterdrückst.

        So long,
         Martin

        --
        Funktion und Referenz auf diese sind mir bekannt, mit Zeigern kann ich nicht viel mehr anfangen, als damit auf Buttons zu klicken.
          (Ashura)
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Hallo,

          ich verwende folgenden code:
          echo "INSERT INTO testtabelle VALUES (".mysql_real_escape_string(ID2,$mydbclass->connection).", ".ID2.")";

          heraus kommt dann folgendes:
          INSERT INTO testtabelle VALUES (, 10)

          dann ist die Konstante ID2, die du als Funktionsargument übergibst, entweder ein Leerstring oder nicht definiert. Im zweiten Fall sollte PHP sich außerdem mit einer Notice beschweren, falls du diese Meldungen nicht unterdrückst.

          Vielen Dank für die Antworten.
          ich habe mein Problem selber lösen können: ich hatte vergessen, dass ich meine MySQL Klasse umgestellt hatte, sodass diese erst beim aufruf von query() die Verbindung aufbaut und direkt danach wieder schließt und somit bekommt die escape Funktion natürlich keine gültige Ressource...

          1. Tach!

            ich habe mein Problem selber lösen können: ich hatte vergessen, dass ich meine MySQL Klasse umgestellt hatte, sodass diese erst beim aufruf von query() die Verbindung aufbaut und direkt danach wieder schließt und somit bekommt die escape Funktion natürlich keine gültige Ressource...

            Und das kann dir prinzipiell nicht passieren, wenn du mysqli als (Basis-)Klasse verwendest. Denn dann könntest du von der Instanz aus die Methode (real_)escape_string() aufrufen. Wenn du nun, warum auch immer, keine Instanz hast, wird schon das als Fehler beanstandet. Außerdem stehen dir mit mysql die Prepared Statements zur Verfügung, bei denen du gleich gar keine Maskierung mehr benötigst.

            dedlfix.

            1. Und das kann dir prinzipiell nicht passieren, wenn du mysqli als (Basis-)Klasse verwendest. Denn dann könntest du von der Instanz aus die Methode (real_)escape_string() aufrufen. Wenn du nun, warum auch immer, keine Instanz hast, wird schon das als Fehler beanstandet. Außerdem stehen dir mit mysql die Prepared Statements zur Verfügung, bei denen du gleich gar keine Maskierung mehr benötigst.

              Ich werde es mal man ansehen. für mein Aktuelles Projekt wäre es aber zu viel Umstellung.