Ankündigung

Einklappen
Keine Ankündigung bisher.

mysql_real_escape_string

Einklappen

Neue Werbung 2019

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

  • mysql_real_escape_string

    Ich habe bereits in diesem Thread gelesen, dass man für die Funktion mysql_real_escape_string() eine Datenbankverbindung braucht, damit sie funktioniert.
    Ich habe jetzt zur schnelleren Benutzung eine Funktion safe() geschrieben:
    PHP-Code:
    function safe($str) {
    return 
    mysql_real_escape_string($str);

    Eigentlich hat das auch alles funktioniert, und auch auf meiner Seite funktioniert es. Nur erzählen manche Benutzer, dass sie manchmal (!) die folgende Fehlermeldung erhalten:
    Code:
    Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in [...]functions.php on line 50
    
    Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'wwwrun'@'localhost' (using password: NO) in [...]functions.php on line 50
    
    Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in [...]/functions.php on line 50
    Ich kann doch jetzt nicht in meine safe-Funktion eine Datenbankverbindung aufmachen. :-/


  • #2
    Nein, kannst Du nicht. Ich wüßte auch nicht, was an Deiner Funktion besser sein soll (außer dass sie vielleicht Buchstaben spart).
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Zitat von odaa Beitrag anzeigen
      Ich habe jetzt zur schnelleren Benutzung eine Funktion safe() geschrieben
      Eine Funktion in eine andere kapseln, die nur die ursprüngliche aufruft - absoluter Unfug; und das nur, weil dir der Name nicht „passt“ bzw. zu lang ist.

      Nutze Copy&Paste, wenn du dir diese immense Tipparbeit sparen willst; oder nutze eine IDE mit automatischer Namensvervollständigung.


      Und das Problem an sich hat mit deiner Umweg-Funktion sicher nichts zu tun.
      Dass eine Datenbank-Verbindung nicht hergestellt werden kann, kann schon mal passieren - aus verschiedensten Gründen.
      Wenn man erst mal sauber die Verbindung aufbaut, dann hat man an der Stelle auch Gelegenheit, darauf entsprechend zu reagieren.

      Kommentar


      • #4
        Wieso ist es denn schlechter eine Funktion in der Funktion aufzurufen?
        Was rauskommt ist das gleiche und soweit ich weiß, ändert es auch nicht viel an der "Arbeitsweise" der Funktion.

        Nichtsdestotrotz weiß ich immer noch nicht, warum die Funktion manchmal geht und manchmal nicht. ^^

        Kommentar


        • #5
          Naja, was willst Du hören? Dein Weg ist halt Murx.
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            Zitat von odaa Beitrag anzeigen
            Wieso ist es denn schlechter eine Funktion in der Funktion aufzurufen?
            Weil Funktionen nicht zum Selbstzweck da sind.
            Weil deine Funktion im Namen wenig darüber aussagt, was sie macht.
            Weil man so beim Blick in den Code nicht gleich erkennt, was da passieren soll, sondern erst mal wieder nachschauen muss, was die Funktion macht.
            ...

            Kommentar


            • #7
              Hier. Gut, können wir jetzt weiterreden?
              Anscheinend kann man mir hier auch nicht helfen - dann werd ich mal weiter "forschen", woran es liegt...

              Kommentar


              • #8
                Zitat von odaa Beitrag anzeigen
                Klare und bestechende Logik - wenn man mir sagt, dass etwas dumm ist - dann suche ich mir halt einen weiteren Dummen, um es zu bestätigen ...

                Anscheinend kann man mir hier auch nicht helfen
                Doch - schon passiert.

                Kommentar


                • #9
                  dann werd ich mal weiter "forschen", woran es liegt...
                  Was heißt hier „weiter forschen“? Das Manual sagt zu [MAN]mysql_real_escape_string[/MAN] alles aus, was DU wissen must:
                  link_identifier

                  The MySQL connection. If the link identifier is not specified, the last link opened by mysql_connect() is assumed. If no such link is found, it will try to create one as if mysql_connect() was called with no arguments. If no connection is found or established, an E_WARNING level error is generated.
                  Der Parameter ist zwar optional, wenn die DB-Connection nicht steht, krachts dann aber.

                  Die verlinkte user note suggeriert desweiteren etwas sehr gefährliches, nämlich, dass real_escape (resp. „safe“) einen Wert sichert. Das ist aber totaler Blödsinn, weil die Sicherheit nur im Kontext eines Stringbegrenzers gegeben ist. Stichwort Kontextwechsel - wurde zum Thema hier im Board schon mehrfach ausgeführt.
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    [OT]
                    Zitat von nikosch Beitrag anzeigen
                    Was heißt hier „weiter forschen“?
                    Forschen bedeutet, Neuland zu betreten, teilweise unter Erbringung großer persönlicher Opfer ... und für manch einen ist der Weg ins Manual offenbar genau das.


                    [/OT]

                    Kommentar


                    • #11
                      Zitat von ChrisB
                      Eine Funktion in eine andere kapseln, die nur die ursprüngliche aufruft - absoluter Unfug; und das nur, weil dir der Name nicht „passt“ bzw. zu lang ist.

                      Nutze Copy&Paste, wenn du dir diese immense Tipparbeit sparen willst; oder nutze eine IDE mit automatischer Namensvervollständigung.
                      Deine pauschale Antwort ist doch genauso schlecht. Was macht denn ein Datenbank-Adapter anders, den ich mit $this->quote/escape/... aufrufe? Sich um das escapen kümmern - je nach benutzter Datenbankengine.
                      Da kann sich der Adapter in dem Zusammenhang dann auch gleich um das Einfügen des MySQL-Identifiers kümmern.

                      Im Zusammenhang mit dem Ausgangsposting wäre das für einen Anfänger auch über eine globale Variable/ eine Registry einfach möglich - man muss nicht jedem Anfänger gleich mit Softwaredesign kommen.
                      Absoluter Unfug sieht daher erstmal anders aus und wäre mir als Anfänger sauer aufgestoßen. Auch wenn du auf das Ausgangsposting bezogen Recht hast, würde ich mir manche Posts konstruktiver wünschen. Gerade am Anfang muss man beim Programmieren auch vorwärts kommen, damit das Spaß macht. Bitte mehr in die richtige Richtung weisen ohne drauf zu hämmern.

                      grüße


                      Basti
                      I like cooking my family and my pets.
                      Use commas. Don't be a psycho.
                      Blog - CoverflowJS

                      Kommentar


                      • #12
                        Ich hab mir mal einen abgestammelt und eine entspr. Usernote ergänzt. Sollte demnächst auftauchen.

                        Absoluter Unfug sieht daher erstmal anders aus und wäre mir als Anfänger sauer aufgestoßen. Auch wenn du auf das Ausgangsposting bezogen Recht hast, würde ich mir manche Posts konstruktiver wünschen. Gerade am Anfang muss man beim Programmieren auch vorwärts kommen, damit das Spaß macht. Bitte mehr in die richtige Richtung weisen ohne drauf zu hämmern.
                        Ehrlich gesagt habe ich bewußt nicht global erwähnt. Es ist wirklich nötig, zu begreifen, dass „safe“ hier keinen Mehrwert schafft, auf der anderen Seite aber ein Problem. Im Kontext eines OO-basierten DB-Handlers ist zumindest der Sinn erfüllt, dass die Funktion im Kontext des Objektes abgebildet wird, mit dem Hinweis, dass die entspr. Methode auf die Connection zugreifen kann, die das Objekt vorhält. Aber selbst dieser OO-Wrapper wird sich die Kritik der Nutzlosigkeit vorhalten lassen müssen - wenn auch im Ganzen für das gesamte Objekt.
                        --

                        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                        --

                        Kommentar


                        • #13
                          Zitat von rudygotya Beitrag anzeigen
                          Was macht denn ein Datenbank-Adapter anders, den ich mit $this->quote/escape/... aufrufe?
                          Der kapselt zumindest schon mal die Methoden in einem Objekt, und stellt damit einen sinnvollen logischen Zusammenhang her.

                          Eine Funktion, die nichts weiter macht, als eine andere aufzurufen, ist Blödsinn. Und dass ein „langer“ Funktionsname und damit verbundene Schreibarbeit absolut kein Argument sein kann, sollte selbst einem Anfänger klar sein. Sonst würden nämlich alle nativen Funktionen nur a(), b() usw. usf. heissen. Dass das Schwachsinn ist, muss jedem einleuchten, der irgendwas programmieren will.

                          Auch wenn du auf das Ausgangsposting bezogen Recht hast, würde ich mir manche Posts konstruktiver wünschen.
                          Wenn ich als „Begründung“ für solches Vorgehen dann auch noch einen Link auf eine Stelle vorgehalten bekomme - sorry, dann ist meine Geduld auch mit einem Anfänger extrem schnell zuende.
                          Wenn wenigstens noch irgendeine eigene Argumentation kommen würde, die abseits vom Unsinns-Argument Schreibarbeit irgendwas mit ein bisschen Substanz liefern würde, dann könnte man das vielleicht noch weiter diskutieren.
                          Aber mir nur eine Stelle vorzuhalten, wo ein anderer Nutzer den gleichen Quark vorschlägt, und damit die Diskussion über Sinn und Unsinn totschlagen zu wollen („Hier. Gut, können wir jetzt weiterreden?”) - sorry, wer mir so doof kommt, der hat's nicht mehr anders verdient.

                          Kommentar


                          • #14
                            @rudygotya: Danke!!

                            Zitat von nikosch Beitrag anzeigen
                            Ehrlich gesagt habe ich bewußt nicht global erwähnt. Es ist wirklich nötig, zu begreifen, dass „safe“ hier keinen Mehrwert schafft, auf der anderen Seite aber ein Problem.
                            Da ich Informatik studiere, verstehe ich Begriffe wie "global" durchaus (auch, wenn ich mir vieles trotz meines Studiums nicht anmaße besser zu wissen - so gut bin ich auch wieder nicht ).
                            Auch weiß ich (weil man das ja so schön lernt), dass man seine Funktionen immer so benennen soll, dass auch andere Programmierer verstehen, was sie machen. Aber ich glaube, ich bin nicht die Einzige, die das hin und wieder missachtet.


                            Ich habe jetzt mit einem Freund zusammen wahrscheinlich das Problem gefunden. Da hätte mir wohl niemand weiterhelfen können mit den wenigen Informationen, die ich angegeben hatte (aber wer konnte ahnen, wie weitgreifend das Problem ist ^^).
                            Nur der Vollständigkeit halber: Auf meiner Webseite habe ich alle 5 Minuten einen Datenbank-Wechsel, da ich meine Online-Liste ausgelagert habe [...]. Vermutlich hatte mysql_real_escape_string() da dann Probleme, da es nicht die richtige Connection gefunden hat.
                            Daher trat der Fehler auch nur manchmal auf und nicht immer. Ich hoffe jetzt nur, dass es das auch war, muss es noch genauer testen.



                            Zitat von ChrisB Beitrag anzeigen
                            („Hier. Gut, können wir jetzt weiterreden?”) - sorry, wer mir so doof kommt, der hat's nicht mehr anders verdient.
                            Es tut mir leid, falls das unhöflich rüber kam. Ich war durch
                            Zitat von nikosch Beitrag anzeigen
                            Naja, was willst Du hören? Dein Weg ist halt Murx.
                            ein bisschen genervt. Obwohl ich tunlichst versucht habe, mich nicht blöd anzustellen.
                            Und wenn ein Codeschnipsel auf php.net beschrieben ist, glaube ich nicht, dass er so unglaublich schlecht ist.

                            Argh, mist, wollte das eig in den vorigen Post einfügen. -_-

                            [MOD: Merge ]

                            Kommentar


                            • #15
                              Auf meiner Webseite habe ich alle 5 Minuten einen Datenbank-Wechsel, da ich meine Online-Liste ausgelagert habe [...]. Vermutlich hatte mysql_real_escape_string() da dann Probleme, da es nicht die richtige Connection gefunden hat.
                              Daher trat der Fehler auch nur manchmal auf und nicht immer. Ich hoffe jetzt nur, dass es das auch war, muss es noch genauer testen.
                              Da Du sowieso für jeden Request ein mysql_connect aufrufen musst, ist das eigentlich keine haltbare Argumentation. Das Connect muss in jeden Fall dem Escaping vorangehen!*) Vermutlich wird nicht überall in der Applikation darauf geachtet.

                              Da ich Informatik studiere, verstehe ich Begriffe wie "global" durchaus (auch, wenn ich mir vieles trotz meines Studiums nicht anmaße besser zu wissen - so gut bin ich auch wieder nicht ).
                              Habe Dir auch nicht unterstellt, diese nicht zu verstehen. Nur sind Globals per se schlecht und der Wrapper ist noch dazu schlecht. Daher ist mein Anliegen eher, dass Du den Wrapper rausnimmst, als dass Du mit global alles noch schlimmer machst. Klar ist das mit mehr Arbeit verbunden.

                              *) Wenn die Connection im Konstruktor stattfindest auch noch mal ein kleines Argument, das OO-Wrapper von funktionalen Wrappern unterscheidet.
                              --

                              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                              --

                              Kommentar

                              Lädt...
                              X