Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL schreibt falschen Integer-Wert in die Datenbank

Einklappen

Neue Werbung 2019

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

  • MySQL schreibt falschen Integer-Wert in die Datenbank

    Hallo Community,
    Ich habe ein merkwürdiges Problem und zwar werden, wie die Überschrift verrät, kann ich
    meine Zahlenwerte nicht richtig in meine Datenbank eintragen.
    Einige werden richtig eingetragen, andere wiederrum nicht.

    Ich versuche die Daten normal mit einer mysql_query() einzutragen. Davor werden diese
    durch mysql_real_escape_string() behandelt.

    Woran könnte es also liegen, dass meine Daten falsch eingetragen werden?

    MfG

  • #2
    Wie wäre es mit einem bisschen Quellcode?

    Kommentar


    • #3
      Eine zu hohe Zahl, bei einem falschen Datentyp?

      Kommentar


      • #4
        Hallo,
        mit diesem Code versuche ich die Daten in die Datenbank zu schreiben.
        Das Array $value enthält die bereits angepassten Werte:
        PHP-Code:
        foreach($value as $name => $visitors) {
            
        $result mysql_query("SELECT `id` FROM `tabelle` WHERE `id` = '".$id."' AND `name` = '".$name."'");
            if(
        mysql_num_rows($result) == 1) {
                
        mysql_query("UPDATE `tabelle` SET `requests` = '".$visitors."' WHERE `id` = '".$id."' AND `name` = '".$name."'");
            }
            else {
                
        mysql_query("INSERT INTO `tabelle`(`id`, `name`, `requests`) VALUES('".$id."', '".$name."', '".$visitors."')");
            }

        Die Tabellenspalte `requests` ist mit int(255) formatiert und bis jetzt übersteigen die Werte
        nicht 1000, sind also relativ klein.
        Und was mir dabei auch noch einfällt ist, dass ein anderer Code eine Zeit lang funktioniert
        hat und jetzt ein ähnliches Problem aufweist.
        Kann es sein, dass es am meinem Anbieter liegt? Könnten sie was in der Config geändert
        haben? 0o

        MfG

        Kommentar


        • #5
          Entweder fehlt es dir in der Tabelle an einem Primary Key oder du verwendest ihn falsch.

          Folgende Spalte würde ich dir für "fast" jede Tabelle als allererstes empfehlen:

          Spaltenname: id
          Typ: int
          Value/Wert: 11 ( daher sollte es später automatisch int(11) heißen )
          A_I (Auto_Increment, also automatisch um 1 erhöhen) : Ja bzw. die Box Markeiren
          Key: Primary


          Und die Standard Koallation für die Tabellen am besten utf8_general_ci.

          Als letzen Schritt noch gleich nach der Verbindung und Selektierung der Datenbank, folgenden Query benutzen:

          PHP-Code:

          mysql_query
          ("SET NAMES 'utf8'"); 

          Dadurch verhinderst du das Umlaute wie "ä" nicht als "Ä%/" oder so angezeigt werden.


          Und folgendes:

          PHP-Code:
          mysql_query("INSERT INTO `tabelle`(`id`, `name`, `requests`) VALUES('".$id."', '".$name."', '".$visitors."')"); 
          // Abändern zu:

          mysql_query("INSERT INTO `tabelle`(`id`, `name`, `requests`) VALUES( NULL, '".$name."', '".$visitors."')"); 

          // oder gleich:

          mysql_query("INSERT INTO `tabelle`( `name`, `requests`) VALUES( '".$name."', '".$visitors."')"); 
          Viel Erfolg

          Kommentar


          • #6
            Hallo,
            danke für die Antwort. Aber das habe ich alles bedacht.
            Die Spalte `id` ist tatsächlich ein Primary Key mit autoincrement und die
            Verbindung habe ich auch gleich auf UTF-8 gesetzt.
            Das funktioniert ja wunderbar. Nur das Inserieren von Zahlen in die Spalte `requests`
            schlägt fehl. Es werden teilweise komplett andere Werte eingetragen.

            Kommentar


            • #7
              Du probierst einen String in ein Integer-Feld einzutragen.

              PHP-Code:
              mysql_query("INSERT INTO `tabelle`( `name`, `requests`) VALUES( '".$name."', ".$visitors.")"); 

              Kommentar


              • #8
                Ich habs jetzt probiert, wie ph|L es gesagt hat, doch dies liefert mir immernoch die selben
                Werte in der Datenbank.
                Ich habe noch einige Tests angestellt und muss feststellen, dass wenn ich versuche
                einzelne Zahlen in Textspalten (z.B. VARCHAR/TEXT) zu schreiben, diese auch ab und zu
                verfälscht werden.

                Bitte helft mir Leute. Es kann doch nicht sein, dass keine Zahlenwerte eintragen kann?!?!

                MfG

                Kommentar


                • #9
                  Zitat von IgelHaut Beitrag anzeigen
                  I
                  Ich habe noch einige Tests angestellt und muss feststellen, dass wenn ich versuche
                  einzelne Zahlen in Textspalten (z.B. VARCHAR/TEXT) zu schreiben, diese auch ab und zu
                  verfälscht werden.
                  Du kennst die Ursache. beschäftige Dich mit Datentypen.

                  Andreas

                  Kommentar


                  • #10
                    Zitat von IgelHaut Beitrag anzeigen
                    Ich habs jetzt probiert, wie ph|L es gesagt hat, doch dies liefert mir immernoch die selben
                    Werte in der Datenbank.
                    Ich habe noch einige Tests angestellt und muss feststellen, dass wenn ich versuche
                    einzelne Zahlen in Textspalten (z.B. VARCHAR/TEXT) zu schreiben, diese auch ab und zu
                    verfälscht werden.

                    Bitte helft mir Leute. Es kann doch nicht sein, dass keine Zahlenwerte eintragen kann?!?!

                    MfG
                    Was bedeutet denn "verfälscht werden"? Wie akretschmar dir schon empfohlen hat, solltest du dich mit den grundlegenden Datentypen auseinander setzen und wie man diese in eine Datenbank via PHP einfügt - dann löst dich dein Problem von selbst.

                    Kommentar


                    • #11
                      Die Zahl sollte dennoch korrekt eingetragen werden wenn der Input eine Ganzzahl ist, auch wenn er als String im Query steht.

                      Wenn ID ein Primary Key ist erübrigt sich auch weitere Bedingungen an die Abfrage zu hängen:

                      PHP-Code:
                      foreach($value as $name => $visitors) {
                          
                      $result mysql_query("SELECT `id` FROM `tabelle` WHERE `id`={$id}");
                          if(
                      mysql_num_rows($result) == 1) {
                              
                      mysql_query("UPDATE `tabelle` SET `requests`={$visitors} WHERE `id`={$id}");
                          }
                          else {
                              
                      mysql_query("INSERT INTO `tabelle` (`id`, `name`, `requests`) VALUES (NULL, \"{$name}\", {$visitors})");
                          }

                      Wenn der Fehler weiterhin auftritt speichere doch mal alle Queries zum debuggen in eine Text-Datei und überprüfe diese dann.

                      Kommentar


                      • #12
                        1) jenau - erster Schritt zum Aufklären solcher Merkwürdigkeiten .... statt die Abfrage direkt auszuführen, baue erst einen String zusammen, gib diesen zu Debug-Zwecken aus und DANN erst abschicken

                        2) int(255) ist sinnlos ... die Datenbank kann für Integer je nach unterliegender Architektur 32 bit oder 64 bit verwenden .. aber ein 64 bit - Integer kann trotzdem nicht 255 Dezimalstellen aufnehmen ....

                        3) hast du mal in dein Array geschaut, ob es überhaupt enthält, was du erwartest ?

                        Kommentar


                        • #13
                          Wenn ich meine Queries in den Output schreiben lasse, sehe ich, dass alle Werte da richtig eingetragen werden
                          sollten:
                          Code:
                          UPDATE `tabelle` SET `requests` = '830' WHERE `id` = '8' AND `name` = 'all'
                          Dann gucke ich nach der Ausführung in meine Datenbank und finde unter der id = 8 einen Wert von 2 und nicht 830!
                          Wie kann das sein?

                          Kommentar


                          • #14
                            Zitat von IgelHaut Beitrag anzeigen
                            Wenn ich meine Queries in den Output schreiben lasse, sehe ich, dass alle Werte da richtig eingetragen werden
                            sollten:
                            Code:
                            UPDATE `tabelle` SET `requests` = '830' WHERE `id` = '8' AND `name` = 'all'
                            Dann gucke ich nach der Ausführung in meine Datenbank und finde unter der id = 8 einen Wert von 2 und nicht 830!
                            Wie kann das sein?
                            Und welchen Datentyp hat das Feld "requests" ?

                            Kommentar


                            • #15
                              Na int(255), aber ich hab auch schon andere Datentypen ausprobiert.
                              Z.B. int(11), also den Standard, dann habe ich noch varchar und text probiert, einfach nur um zu sehen, ob die Daten
                              als String richtig eingetragen werden - aber nein, auch das schlägt fehl.

                              ---- Edit -----
                              Ich habe jetzt noch probiert den Befehl direkt in der Datenbank auszuführen, mit Erfolg.
                              Da werden die Werte dann richtig inseriert.

                              Kommentar

                              Lädt...
                              X