gelöschter Benutzer

PHP Fehler: String wird Long und überschreibt Werte

am 10.11.2011, 13:38 Uhr eröffnete 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



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

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



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

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



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

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



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.



gelöschter Benutzer
am 10.11.2011, 16:43 Uhr schrieb

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!


gelöschter Benutzer
am 30.12.2011, 07:37 Uhr schrieb

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 5272 Themen und 36104 Beiträge.
Insgesamt sind 496 Mitglieder registriert.