PHP Fehler: String wird Long und überschreibt Werte
Redaktionelle Einordnung
Diese archivierte Diskussion behandelt PHP Fehler: String wird Long und überschreibt Werte aus Sicht der Rubrik PHP & MySQL.
CMS- und Technikfragen sind heute besonders dann relevant, wenn sie Indexierung, Rendering, interne Verlinkung oder Relaunch-Risiken beeinflussen.
Sinnvoll nutzbar bleibt der Thread vor allem als historischer Kontext, für typische Fragestellungen und zur Einordnung älterer Empfehlungen.
Einige im historischen Thread genannte Tools, Dienste oder externe Links könnten heute nicht mehr verfügbar oder inhaltlich überholt sein. Nutzen Sie sie bitte nur mit zusätzlicher Prüfung.
Startbeitrag
Originaler Foreninhalt in modernisierter Darstellung.
Ich habe ein Problem,
in einem Script, Posten geht aus Datenschutz leider nicht, kommt es zu einem Speicherfehler.
Auslöser ist Wahrscheinlich folgender Bug:
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 ?
Antworten
10 BeiträgeBlindflug::
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
An der Zeichnlänge liegt es nicht, da diese begrenzt ist, und der Fehler ja nur sporadisch auftritt.
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!?
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
Ultima schrieb:
2147483647
Das ist das maximium eines signed Integers. Vermutlich versuchst du etwas zu speichern das größer ist als dieser Wert.
Hallo
Ich frage jetzt mal ganz blöde in den Raum.
Seid ihr sicher das es an PHP und nicht an Mysql liegt?
Gruß
Jörg
Ich bin auch von SQL aus gegangen, denn das verhalten ist Typisch für MySQL.
Und ja php kennt longs.
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
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.
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...