mysql_real_escape_string bei PDO ohne persistente Verbindung

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

  • mysql_real_escape_string bei PDO ohne persistente Verbindung

    Hallo

    ich benutze die unterstehende Funktion, um Eingaben zu maskieren. Nach Umstellung meiner Scripts auf PDO funktioniert die Funktion nicht mehr, weil sie offensichtlich eine offene Verbindung zum DB-Server benötigt. Da ich bisher nicht mit einer persistenten Verbindung arbeite, steht nicht immer eine Verbindung zur Verfügung.

    Fragen:
    1. Gibt es eine Alternative zu mysql_real_escape_string?
    Falls nein, muß ich grundsätzlich eine DB-Verbindung aufbauen, bevor ich diese Funktion benutze oder kann ich das umgehen?
    2. Funktioniert mysql_real_escape_string auch mit anderen DB-Servern?

    PHP-Code:
    function quote_smart($value) { // Stripslashes
        
    if (get_magic_quotes_gpc()) {
            
    $value stripslashes($value);
        } 
    // Quote if not a number or a numeric string
        
    if (!is_numeric($value)) {
            
    $value mysql_real_escape_string($value);
        }
        return 
    $value;


  • #2
    Das Maskieren potenziell gefährlicher Zeichen kann PDO auch von hause aus, und zwar um einiges besser. Siehe Prepared Statements unter PDO-Funktionen im Manual.
    Nieder mit der Camel Case-Konvention

    Kommentar


    • #3
      das heisst, ich müßte alle Queries auf prepared statements umstellen?

      Kommentar


      • #4
        Re: mysql_real_escape_string bei PDO ohne persistente Verbindung

        Du willst doch sicher nicht nur zum Spaß Queries konstruieren, sondern irgendwie auch ausführen oder? Bisher hast du die Verbindung zu DB wohl erst aufgebaut, wenn alles andere soweit erledigt war. Aber das kannst du ja ändern. Erst verbinden, dann Queries basteln.

        Original geschrieben von Stonebreaker62
        2. Funktioniert mysql_real_escape_string auch mit anderen DB-Servern?
        mysql_real_escape_string() maskiert bestimmte Zeichen, die für MySQL-Server eine Semantik haben und deswegen die Semantik der gesamten Query verändern würden. Andere DBS sprechen evtl. einen anderen SQL-Slang. Deswegen müßte evtl. anders maskiert werden. Fazit: Du kannst diese Funktion immer nutzen, aber sicher und sinnvoll ist sie nur im Zusammenhang mit MySQL. Daher der Name ...

        Kommentar


        • #5
          Original geschrieben von Stonebreaker62
          das heisst, ich müßte alle Queries auf prepared statements umstellen?
          Du musst nicht, aber was außer die Tatsache, dass du deine Abfragen umschreiben müsstest, spricht dagegen? Da du schon auf PDO umgestiegen bist, kannst du auch ruhig seine volle Funktionalität nutzen. Und Prepared Statements überschreiten den Horizont "deiner" quote_smart Funktion in einigen Punkten. Daher mein Rat
          Nieder mit der Camel Case-Konvention

          Kommentar


          • #6
            Der Tip mit prepared Statements war sehr hilfreich. Ich habe nun einige Scripts umgestellt - die Performance ist phantastisch.

            Eine Frage noch:
            Ich verbinde nun persistent zu Beginn jeder Methode mit der DB und setze das PDO-Objekt am Ende der Methode auf null.

            Ist das so OK oder sollte man die Verbindung in einer SESSION-Variablen speichern um von überall her darauf zugreifen zu können?

            Kommentar


            • #7
              Original geschrieben von Stonebreaker62
              Der Tip mit prepared Statements war sehr hilfreich. Ich habe nun einige Scripts umgestellt - die Performance ist phantastisch.
              Die Performance ändert sich eigentlich gar nicht - außer du setzt einen Query mit tausenden von unterschiedlichen Werten ab, dann wird nämlich die erneute Parsung vom Query umgangen - im normalen Betrieb sind Prepared Statements mehr eine Spielerei für den Programmierer ^^,

              Ist das so OK oder sollte man die Verbindung in einer SESSION-Variablen speichern um von überall her darauf zugreifen zu können?
              Das geht doch sowieso nicht. Man kann resourcen nicht in der Session speichern~

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar

              Lädt...
              X