Chance
Themenersteller
Programmierer
Guru (173 Beiträge)
PHP Fehler: String wird Long und überschreibt Werte
Ich habe ein Problem,
in einem Script, Posten geht aus Datenschutz leider nicht, kommt es zu einem Speicherfehler.
Auslöser ist Wahrscheinlich folgender Bug:
bugs.php.net/bug.php
bugs.php.net/bug.php
Auf dem Server läuft 5.2.3, ein Update ist leider nicht so einfach möglich wegen bestimmter Software.
In einem Formularfeld soll eine Kontonummer eingegeben werden,
was meistens Problemlos klappt, allerdings wird Sie hin und wieder, bei gleichen Daten, gegen 2147483647 ersetzt.
Ich weiss, es ist ein Blindflug...
Aber könnt Ihr trotzdem Anhaltspunkte liefern ?
romacron
JDev Xer
Content Gott (1224 Beiträge)
Blindflug::
Apache (fcgi) whatever ist zu dünn eingestellt.
Die übertragene Datenmenge ist grösser als erlaubt.
Der Speicher(Memory) ist zu klein.
Lass die Kontonummer als String
Chance
Programmierer
Guru (173 Beiträge)
An der Zeichnlänge liegt es nicht, da diese begrenzt ist, und der Fehler ja nur sporadisch auftritt.
gelöschter Benutzer
2147483647
Das ist das maximium eines signed Integers. Vermutlich versuchst du etwas zu speichern das größer ist als dieser Wert.
Dein Bugs beziehen sich auf die Content-Length, das ist etwas anderes und auch nur bei 32 Bit Systemen. Und ich glaub nicht das du POST Daten >2,1GB sendest!?
klaus_b
Er ernährt mich ;-)
Content Meister (328 Beiträge)
Ultima schrieb:
2147483647
Das ist das maximium eines signed Integers. Vermutlich versuchst du etwas zu speichern das größer ist als dieser Wert.
Kennt PHP keinen Datentyp long (64 bit Ganzzahl)?
Damit kann der OP Werte von -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807 speichern.
Servus,
Klaus
klaus_b@.NET über alles was an .NET und C# Spass macht.
joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
gelöschter Benutzer
Ich bin auch von SQL aus gegangen, denn das verhalten ist Typisch für MySQL.
Und ja php kennt longs.
Chance
Programmierer
Guru (173 Beiträge)
Wie gesagt, der Fehler tritt bei gleichen Eingabe zufällig auf,
gespeichert wird in eine MySQL DB. Kann da der Fehler sein ?
Es ist eine normale Kontonummer, und als String formatiert.
ALso mit leerzeichen < 2 Gb
gelöschter Benutzer
Dann liegt der Fehler beim Speichern in der DB aber ohne ein Codebeispiel ist es schwer dir zu helfen.
Es gibt keine Zufälle, der Fehler kann auch durch ein vorhergehendes Feld ausgelöst werden, zB durch einen unescapten String.
Mach mal vor der Speicherung einen Typcast auf int oder long. Und im Query die Anführungszeichen weg lassen, vielleicht ist es ja ein Leerzeichen oder so das MySQL deine Zahl als String einlesen lässt. Das könnte der Grund für solche Ausgaben sein.
matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
Ultima schrieb:
Mach mal vor der Speicherung einen Typcast auf int oder long. Und im Query die Anführungszeichen weg lassen, vielleicht ist es ja ein Leerzeichen oder so das MySQL deine Zahl als String einlesen lässt. Das könnte der Grund für solche Ausgaben sein.
Müsste es nicht andersherum sein? Er will einen String speichern, keine Zahl.
Für mich klingt das nach signed int, wo es char oder varchar sein sollte. Manche Kontonummern sind als Zahl zu groß, einige fangen u.U. mit einer 0 an...
Make Seitenreport great again!
Ich hatte selbiges Phänomen auf einem Projekt das einen Facebook-Login ermöglichte. Dabei wurde die tatsächliche "Facebook-uid" des Users durch deine genannte Zahl in die Datenbank gespeichert.
Mach aus dem Feld in der Datenbank von daher ein BIGINT statt ein INT !!! Das hatte dann mein Problem gelöst...
Das Seitenreport Forum hat aktuell 5276 Themen und 36111 Beiträge.
Insgesamt sind 48364 Mitglieder registriert.
Beitrag erstellen
EinloggenKostenlos registrieren