Probleme mit mysli::real_escape_string in Verbindung mit magic_quotes_gpc

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

  • #31
    Zitat von tim-gt Beitrag anzeigen
    Ich finde den Namen prepare() aber gar nicht so unsinnig, schliesslich wird mit dem Verbindungsaufbau eine Abfrage vorbereitet.
    Das wage ich zu bezweifeln. Bitte zeige mir den Teil in prepare(), wo die Verbindung "vorbereitet" wird.

    Zitat von tim-gt Beitrag anzeigen
    Klar, die Überschneidung mit mysqli:repare() ist da, aber überschrieben wird hier definitiv nichts.
    Es ist einfach sehr unglücklich gewählt. Bei "prepare" denkt jeder Programmierer an Prepared Statements, was das hier definitiv nicht ist.

    Zitat von tim-gt Beitrag anzeigen
    Stellt sich mir jetzt nur noch die Frage, wieso der Autor preg_replace genommen hat.
    Das Problem ist eigentlich nicht das preg_replace, sondern dass derjenige, der das geschrieben hat, nicht bedacht hat, dass auch Werte übergeben werden, die aus der Sicht von preg_replace() Zeichen enthalten, die eine bestimmte Bedeutung haben. Man kann es sicher so hinbiegen, dass es richtig funktioniert, aber ich hab ehrlich gesagt keine Lust dazu. Aber wenn du es machen willst, brauchst du dir nur die Doku von preg_replace() anschauen.

    Kommentar


    • #32
      Der Autor hat preg_replace genommen, weil er damit völlig Recht hat, dass ansonsten :10 falsch ersetzt werden würde.
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar


      • #33
        Nein, ich verwende jetzt str_replace.

        PHP-Code:
            public function prepare($sql){                
                
                if(
        $this->con === false){

                        
        $this->connect();
                        if(isset(
        $sql)) {
                          return new 
        DBStmt($this->con$sql);
                        } else {
                  throw new 
        ExcDB('$db->prepare($sql): Es wurde kein Querystring $sql übergeben.');
                }
              } else {
                    return new 
        DBStmt($this->con$sql);
                }
                
            } 
        Hier noch die Methode connect() ebenfalls ein Eigengebräu:

        PHP-Code:
            private function connect(){

              
        $this->checkClass();
                    
        $this->checkExtension();
                    
                    
        Error::get()->setHandler('noHandler');                             // reguläre Fehlermeldung unterdrücken
                    
        $this->con = new mysqli($this->dbhost$this->dbuser$this->dbpw$this->dbname$this->dbport$this->dbsock);
                    
        Error::get()->restoreHandler();

                    if(
        mysqli_connect_errno()){                //mysqli::connect_error() ist bis PHP Version 5.2.9 nicht verfgbar 
                        
        $this->con false;  // Verbindung wieder auf false setzen, wird nmlich auch bei erfolgloser Verbindung zu einem Objekt 
                        
        throw new ExcDBConnection();
                    }
              if(!(
        $this->con->set_charset('utf8'))){   // Charset setzen
                
        throw new ExcDB('Kann Charset nicht setzen');
              }
            } 
        Zuletzt geändert von tim-gt; 29.07.2009, 14:46.

        Kommentar


        • #34
          Zitat von AmicaNoctis Beitrag anzeigen
          Der Autor hat preg_replace genommen, weil er damit völlig Recht hat, dass ansonsten :10 falsch ersetzt werden würde.
          Sag ich ja auch. Nur hat er dabei nicht alles bedacht, wie h3ll das jetzt gesagt hat. Und ich hab den Fehler gemacht, die Methode unreflektiert zu übernehmen, d.h. ohne mich gross mit preg_replace umherzuschlagen.

          Kommentar


          • #35
            Ein connect() im prepare() ist Schwachfug. Die Verbindung sollte dann aufgebaut werden, wenn du das Datenbankobjekt anlegst!

            Kommentar


            • #36
              @h3ll: Ich frag mich grad, was du eigentlich meinst, das der Autor nicht bedacht hat? Spezielle Zeichen im Pattern oder in der Ersetzung? Im Pattern kann ich es mir nicht vorstellen, wenn es nur um numerische Platzhalter geht. In der Ersetzung wäre es nicht viel anders als bei str_replace. Kannst du das bitte nochmal aufklären?
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #37
                Zitat von AmicaNoctis Beitrag anzeigen
                @h3ll: Ich frag mich grad, was du eigentlich meinst, das der Autor nicht bedacht hat? Spezielle Zeichen im Pattern oder in der Ersetzung? Im Pattern kann ich es mir nicht vorstellen, wenn es nur um numerische Platzhalter geht. In der Ersetzung wäre es nicht viel anders als bei str_replace. Kannst du das bitte nochmal aufklären?
                Siehe PHP-Manual unter "replacement":

                PHP: preg_replace - Manual

                Kommentar


                • #38
                  To use backslash in replacement, it must be doubled ("\\\\" PHP string).
                  Das ist wohl gemeint.

                  Kommentar


                  • #39
                    *kopfklatsch* Sorry, ich stand grad auf dem Schlauch. Ich dachte, du meinst im Pattern. Ok, dann würde ich auch str_replace nehmen, aber die Platzhalter vor dem Ersetzen absteigend sortieren, damit größere nicht falsch ersetzt werden.
                    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                    Super, danke!
                    [/COLOR]

                    Kommentar

                    Lädt...
                    X