PHP Fehler: String wird Long und überschreibt Werte

Verfasst am: 10. 11. 2011 [13:38]
Chance
Dabei seit: 13.11.2009
Themenersteller

140 Beiträge
Beitrag hilfreich?

Ich habe ein Problem,

in einem Script, Posten geht aus Datenschutz leider nicht, kommt es zu einem Speicherfehler.

Auslöser ist Wahrscheinlich folgender Bug:
https://bugs.php.net/bug.php?id=51723
https://bugs.php.net/bug.php?id=50940
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 ?

www.piacos.de
www.psi-portal.de
 
Verfasst am: 10. 11. 2011 [13:49]
romacron
Dabei seit: 01.11.2009

1143 Beiträge
Beitrag hilfreich?

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
 
Verfasst am: 10. 11. 2011 [14:23]
Chance
Dabei seit: 13.11.2009
Themenersteller

140 Beiträge
Beitrag hilfreich?

An der Zeichnlänge liegt es nicht, da diese begrenzt ist, und der Fehler ja nur sporadisch auftritt.

www.piacos.de
www.psi-portal.de
 
Verfasst am: 10. 11. 2011 [14:47]
Ultima
Dabei seit: 09.07.2010

759 Beiträge
Beitrag hilfreich?

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!?

 
Verfasst am: 10. 11. 2011 [15:04]
klaus_b
Dabei seit: 17.12.2009

327 Beiträge
Beitrag hilfreich?

"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.
http://www.seitenreport.de/twitter_icon_small.png
 
Verfasst am: 10. 11. 2011 [15:27]
joerg
Dabei seit: 09.06.2009

1540 Beiträge
Beitrag hilfreich?

"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

[Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 10.11.2011 um 15:27.]

 
Verfasst am: 10. 11. 2011 [15:48]
Ultima
Dabei seit: 09.07.2010

759 Beiträge
Beitrag hilfreich?

Ich bin auch von SQL aus gegangen, denn das verhalten ist Typisch für MySQL.

Und ja php kennt longs.


[Dieser Beitrag wurde 2mal bearbeitet, zuletzt am 10.11.2011 um 15:58.]

 
Verfasst am: 10. 11. 2011 [16:43]
Chance
Dabei seit: 13.11.2009
Themenersteller

140 Beiträge
Beitrag hilfreich?

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 ^^

www.piacos.de
www.psi-portal.de
 
Verfasst am: 10. 11. 2011 [17:17]
Ultima
Dabei seit: 09.07.2010

759 Beiträge
Beitrag hilfreich?

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.

[Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 10.11.2011 um 17:17.]

 
Verfasst am: 10. 11. 2011 [17:55]
Matthes
Dabei seit: 08.05.2010

174 Beiträge
Beitrag hilfreich?

"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...


Mal: "May have been the losing side. Still not convinced it was the wrong one."
 




Du bist nicht eingeloggt. Bitte beachte, dass Du eingeloggt sein musst, um Themen zu erstellen oder auf Beiträge zu antworten.

RSS Feed abonnieren

Werde in Echtzeit über neue Foren-Beiträge informiert:



9 Mitglieder waren innerhalb der letzten 15 Minuten online (57 heute gesamt):
alphamerisch, Boxerworld, ElkeTrautmann, Monchi, presse, romacron, San, timeless_81

Administratoren und Moderatoren:
seitenreport

Seitenreport hat 18153 registrierte Mitglieder, 3003 Themen und 29112 Beiträge.
Der aktuelle Mitgliederzuwachs liegt bei durchschnittlich 12 bestätigten Neuregistrierungen pro Tag.
Pro Tag werden im Seitenreport Forum durchschnittlich 1 neues Thema und 7 Beiträge erstellt.
Die Durchschnittszahlen berechnen sich aus den letzten 7 Tagen.

Mehrfach empfohlen

Seitenreport ist einer der bekanntesten SEO und Website Analyse Dienste im deutschsprachigen Raum und wurde u.a. schon empfohlen:
von Mr. Wong im Wong Letter
vom Leserservice der Deutschen Post
vom Technik Blog SiN
und vielen anderen

Partnerprogramm

12% Lifetime Provision auf alle Buchungen von Dir geworbener Mitglieder sowie 0,50 € für jede Registrierung. Eines der besten deutschen Partnerprogramme laut den appCharts von 100partnerprogramme.de. Nimm jetzt teil am Seitenreport Partnerprogramm und verdiene gutes Geld dabei!

* = Partnerlinks