Chance
Themenersteller
Programmierer
Guru (173 Beiträge)

PHP Fehler: String wird Long und überschreibt Werte

am 10.11.2011, 13:38 Uhr eröffnete Chance folgenden Thread
PHP & MySQL    3779 mal gelesen    17 Antwort(en).

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)
am 10.11.2011, 13:49 Uhr schrieb romacron

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)
am 10.11.2011, 14:23 Uhr schrieb Chance

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



gelöschter Benutzer
am 10.11.2011, 14:47 Uhr schrieb

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
Avatar klaus_b
Er ernährt mich ;-)
Content Meister (328 Beiträge)
am 10.11.2011, 15:04 Uhr schrieb klaus_b

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
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 10.11.2011, 15:27 Uhr schrieb joerg

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


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools


gelöschter Benutzer
am 10.11.2011, 15:48 Uhr schrieb

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)
am 10.11.2011, 16:43 Uhr schrieb Chance

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
am 10.11.2011, 17:17 Uhr schrieb

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
Avatar matthes
Foren Moderator
Evil Genius
Content Halbgott (973 Beiträge)
am 10.11.2011, 17:55 Uhr schrieb matthes

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!

prof_dr_dipl_ing
Dipl. Ing. Elektrotechnik
Neuling (5 Beiträge)
am 30.12.2011, 07:37 Uhr schrieb prof_dr_dipl_ing

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




« zurück zu: PHP & MySQL

Das Seitenreport Forum hat aktuell 5274 Themen und 36108 Beiträge.
Insgesamt sind 48348 Mitglieder registriert.