[PHP] casten von bigint

Benutzer-2472

abgemeldet
1 Mai 2006
32.694
1.621
Mahlzeit,
normalerweise würde ich eine Variable casten, beispielsweise
PHP:
$foo=(int) $_POST['bar'];

Wie sieht das aber bei PHP (Typenunsicherheit) mit den Wertebereichen aus? Die Datenbank hat den Typen BigInt mit 15 Stellen, kann man trotzdem (richtig) die übergebene Variable casten, da PHP automatisch den Datentyp ggf. erweitert?
 
s. https://www.klamm.de/forum/showthread.php?t=279545

Wenn PHP auf 64bit-Architektur kompiliert wurde, entspricht ein Integer einem 64-Bitter und alles geht gut. Ansonsten wandelt PHP automatisch auf Floating-Point um und es rundet dir deine Zahl etwas rauf oder runter.

Wenn du explizit auf Integer castet, wie in deinem Beispiel, kriegst du wohl in jedem Fall >2[sup]31[/sup]-1 nur noch PHP_INT_MAX raus, was dir gar nix nützt.
 
Wieso willst du die Variable eigentlich casten?

Um sicherzugehen, dass es eine Zahl ist und für den Fall, dass es keine ist, eben eine 0 zu erhalten ohne eine weitere Fehlerbehandlung haben zu müssen.

is_numeric wäre auch eine Möglichkeit, aber mit dem casten hab ich sehr gute Erfahrungen gemacht, da man so viele potentielle Angriffsstellen schließen kann.
 
Jup, wir kasten einfach mal alles um die Sicherheit zu erhöhen :ugly:

no comment :xx:

Ja tun wir, da ich in dem Script schon einmal trotz is_numeric funktion jemanden hatte, der sein Konto überziehen konnte - per cast war das nicht mehr möglich.

und no comment bringt auch nicht viel ;), schlag lieber ne sinnvolle und sichere Alternative vor, dann hab ich wenigstens was von deinem Beitrag :p
 
und no comment bringt auch nicht viel ;), schlag lieber ne sinnvolle und sichere Alternative vor, dann hab ich wenigstens was von deinem Beitrag :p
mit bcmath rechnen
Denn wenn du es nach int in php castest kannst du dir auch das Bigint in MySQL sparen und nur nen Int signed drausmachen.

Das Problem ist ja, dass is_numeric auch die wissenschaftliche Notation erlaubt.
Deswegen verwende ich meistens ctype_digit;)
PHP versteh die wissenschaftl. Notation auch ;)
Aber wie wir in einem anderen Thema hatten, ist der Wert einfach zu groß für einen 32Bit PHP-Int.
Ich weiß nicht genau wie PHP die Bigints aus der Db umwandelt, aber wenn er sie als Ints lässt, dann gibt es natürlich BufferOverflows und wir beginnen bei neg. max. Int.
 
Naja, man kann's ja ausprobieren. Einfacher als drüber zu diskutieren.
(bigint) $a;

Geht glaub ich nicht.
Habs nicht probiert, sondern nur kurz ins manual geschaut.
Bleibt nix auser auf float casten.
 
Zuletzt bearbeitet von einem Moderator:
Code:
<?php
$a = "123456789012345";
$a = (bigint)$a;
echo sprintf("%d",$a);
?>
Find' ich auch lustig:
Code:
Desktop]$ php test.php
PHP Parse error:  syntax error, unexpected T_VARIABLE in /home/cxd/Desktop/test.php on line 3

Naja, wenn man wirklich den absoluten overkill machen will dann splittet man das ganze in high-bits und low-bits (vom String aus) und interpretiert es als zusammensetzung von high-bits*10^10+low-bits. Ambesten grad in ne Klasse verpacken ^^
 
Das habe ich auch nicht behauptet. Ich habe ihm nur etwas ans Herz gelegt und zum Ausdruck gebracht was ich generell von PHP halte. Nicht mehr und nicht weniger.
 
Das habe ich auch nicht behauptet. Ich habe ihm nur etwas ans Herz gelegt und zum Ausdruck gebracht was ich generell von PHP halte. Nicht mehr und nicht weniger.

Ich bin absoluter Java und JSP Fan, Perl direkt danach, nur hilft es mir nicht, wenn ich ein System aus PHP und MySQL erweitern muss für einen Auftrag ;). PHP ist auch nicht mein Liebling, nur hilft diese Feststellung keinem ;)
 
Kaum Zeit für das eigene Projekt, aber Aufträge annehmen? 8O Dein Ansehen schwindet!
 
Bin zwar auch eher der Java Programmierer, aber ich finde PHP durchaus eine gute Sprache, besonders wenn man schnell etwas basteln will.

Wenn du kein bcmath auf dem Webserver hast wird's allerdings etwas schwer und du musst viel funktionalitaet selber coden (siehe Integer split vorschlag oben)