Announcement

Collapse
No announcement yet.

MySqli elaubt nur Strings mit maximal 256 Zeichen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • MySqli elaubt nur Strings mit maximal 256 Zeichen

    Hallo,

    ich hab es mal sehr provokativ im Titel formuliert, aber es bringt das Problem ziemlich genau auf den Punkt:

    Wenn ich mit einem PreparedStatement eine Spalte vom Typ Text abfrage, wird dieser auf 256 Zeichen gekürzt. Das Problem tritt jedoch nur bei meiner lokalen Version der Website auf. Auf meinem Server im Internet habe ich dieses Problem nicht. Die Werte werden außerdem korrekt in der DB gespeichert und von PhpMyAdmin auch korrekt angezeigt. Ich vermute also irgendeinen Einstellungsfehler. In einem anderen Forum hatte jemand das gleiche Problem wie ich, dort funktionierte es jedoch in der lokalen Version und nur auf dem Server im Internet nicht.

    Wenn jemand eine Idee hat, wo der Fehler liegen könnte oder wenn ihr noch mehr Informationen braucht, dann schreibt mir bitte.
    "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

    Viele Grüße Novi

  • #2
    Ich bin gerade am überlegen, ob ich das Thema nicht im falschem Unterforum eröffnet habe, da mein Problem mit MySqli ja eher den Bereich PHP und DB als direkt die MySQL DB selbst betrifft.

    Hatte jemand vielleicht schon mal ein ähnliches Problem?
    "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

    Viele Grüße Novi

    Comment


    • #3
      hmmm, habe zu deinem Problem gegooglet. M.E. liegt es an PHP und der Abfrage und nicht an MySQL. Konnte jedoch keine Lösung finden. Hier nie ein derartiges Problem unter C/C++, Java u.a. gehabt.
      Christian

      Comment


      • #4
        hmmm, ich werde demnächst mal versuchen dem Problem auf die Schliche zu kommen, indem ich den Fehler weiter einkreise. Da es ja nur lokal auftritt ist es ja nicht wirklich zeitkritisch. Ich werde hier weiter von dem Problem berichten, wenn ich Fortschritte mache.
        "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

        Viele Grüße Novi

        Comment


        • #5
          Hallo Novi,

          wenn es irgendwo eine Definition in den Mysql- Befehlen gibt, die den Spaltentyp 'char' benutzt, dann liegt das Problem dort.

          'char' kann nur 255 Zeichen lang sein.

          Comment


          • #6
            Hallo mtth,

            die spalte ist aber vom Typ Text und PhpMyAdmin zeigt die Werte ja auch komplett an.
            "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

            Viele Grüße Novi

            Comment


            • #7
              Hi,

              ich hab das Problem eben mal etwas genauer untersucht und schon mal Folgendes festgestellt:

              Wenn ich die Abfrage nicht mit PreparedStatements sonder mit der "normalen" Query-Funktion mache funktioniert es. Also mysqli->query() statt stmt->prepare().

              Ich werde das noch mal näher überprüfen... schon etwas seltsam. Vielleicht tritt der Fehler auch nur in Verbindung mit Windows auf?!

              Wenn ich die Länge der Zeichenkette mit MySql-Funktion LENGTH() bestimme, erhalte ich die korrekte Länge von 304. Rufe ich die Zeichenkette hingegen ab, hat sie nur noch eine Länge von 256 Zeichen.

              Selbst wenn ich den Text direkt im Query angebe erhalte ich nur die ersten 256 Zeichen:

              SELECT 'Viel Text ...(gekürzt) ... bla bla' FROM reports WHERE id=? Limit 1";

              Der gleiche Fehler tritt bei einer älteren Version von XAMPP nicht auf. Es scheint wohl mit PHP 5.3 zusammen zu hängen.
              Zuletzt editiert von Novi; 27.10.2009, 18:18.
              "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

              Viele Grüße Novi

              Comment


              • #8
                Hallo,

                bitte testet mal für mich, ob irgendjemand den Fehler mit folgendem Code reproduzieren kann. Ich konnte den Fehler auf einen sehr kleinen Code-Schnipsel reduzieren:

                PHP Code:
                <?php
                $Database 
                = new mysqli('localhost''root''');
                $Statement =  $Database->stmt_init();
                $sql="SELECT 'You can only read the first 256 words of this text. That is why I must write such a long text, because I must reach the limit of 256 words. The same error occours, when you try to select a text column from the database. But I didn\'t had this error before in a previous version of php.'";
                $Statement->prepare($sql);
                $Statement->execute();
                $Statement->bind_result($Text);
                $Statement->fetch();
                $Statement->close();
                var_dump($Text);
                ?>
                Die Ausgabe ist bei mir Folgende:

                HTML Code:
                string(256) "You can only read the first 256 words of this text. That is why I must write such a long text, because I must reach the limit of 256 words. The same error occours, when you try to select a text column from the database. But I didn't had this error before i"
                "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

                Viele Grüße Novi

                Comment


                • #9
                  Hi,

                  ich glaube ich habe 1:1 das selbe Problem auch mein Feld steht auf "Text" auch bei mir werden nur die erstn 256 Zeichen ausgelesen wenn ich mit prepare arbeite. Hast du eine Lösung für das Problem gefunden?

                  Comment


                  • #10
                    Hi,

                    eine Lösung des Problems habe ich nicht gefunden. Ich habe mir aber schon die Mühe gemacht einen Bug-Bericht zu schreiben:

                    http://bugs.php.net/bug.php?id=50021
                    "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

                    Viele Grüße Novi

                    Comment


                    • #11
                      Hallo,
                      hast Du mal versucht zu verfolgen, ob irgendwo auf dem Weg eine Zählung der Zeichen stattfindet?

                      Der Fehler könnte dann so entstehen, daß die Stringlänge geprüft werden soll, tatsächlich aber nur die Anzahl unterschiedlicher Asccii-Zeichen gezählt wird.

                      Ausserdem gibt es solche Probleme mit der Codepage utf-8.

                      Leider weiß ich nicht mehr, wo ich das gefunden hab, ist schon solange her.

                      Comment


                      • #12
                        Hi,

                        Originally posted by mtth View Post
                        (...) ob irgendwo auf dem Weg (...)
                        Wie soll ich das mit dem "Weg" verstehen? Es wird einfach nur ein konstante Zeichenkette zurückgegeben. Wie soll dort irgendwo also nochmal eine Prüfung der Länge stattfinden?
                        "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

                        Viele Grüße Novi

                        Comment


                        • #13
                          Es gab mal einen Bug in PHP, Apache und anderen Programmen, bei denen das das Problem war, weil der Server versucht hat zu erfassen, wieviele Asccii-Zeichen verwendet werden. Eine fehlerhafte Programmierung, die nicht die Anzahl der Ascci-Zeichen zurückgibt, sondern die Zahl als Stringlänge meldet, war glaube ich das Problem.

                          Ich versuchs nochmal zu finden, so kann ich zuwenig dazu sagen.

                          Comment


                          • #14
                            Ich habe mir gerade die neuste Version von XAMPP herunter geladen. In dieser befindet sich schon PHP 5.3.1 . Nun tritt das Problem nicht mehr auf.
                            "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

                            Viele Grüße Novi

                            Comment

                            Working...
                            X