login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Probleem bij getallen van 1E10 (Opgelost)

Offline Ricky - 16/07/2007 10:26 (laatste wijziging 21/07/2007 08:50)
Avatar van RickyPHP beginner Ik heb in een database een structuur aangelegd, waarin je geld/power kan opslaan. Dit veld heb ik tot BIGINT benoemd.
Maar op het moment dat het getal boven de 999.999.999.999 komt (dus dan kom je in de 1E10), gaat het fout; hij maakt er een 1 van.
Dit komt waarschijnlijk door PHP (die het getal dus omzet naar 1E10). Is er een manier om die omzetting te omzeilen? Zodat er dus gewoon 1.000.000.000.000 in de DB gezet wordt?

Dan heb ik het zelf maar opgelost:
Het probleem zat hem in het veld van 255 (=> 20 van gemaakt) en verder gaat het dan prima, number_format() moet er dan wel in blijven staan!

5 antwoorden

Gesponsorde links
Offline smoos - 16/07/2007 10:35 (laatste wijziging 16/07/2007 10:39)
Avatar van smoos PHP gevorderde Je kan getallen tot 18446744073709551615 opslaan in een bigint

Edit:
Het moet maar even zo want het kan niet in 1 link dan worden het stippen <_<

(Je kan getallen...een bigint)
^<- Wat heb ik daar nou aan...?
Offline Thomas - 16/07/2007 12:01
Avatar van Thomas Moderator Gebruik number_format() om je getallen te formatteren.
Offline Ricky - 16/07/2007 20:01 (laatste wijziging 20/07/2007 11:00)
Avatar van Ricky PHP beginner Ik heb even een simpel scriptje gemaakt, waaruit het al gauw duidelijk wordt:

Voeg dit even toe aan een testDB:
  1. CREATE TABLE `number_format_test` (
  2. `geld` bigint(255) NOT NULL,
  3. `id` int(2) NOT NULL,
  4. PRIMARY KEY (`id`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;


Maak hier even een PHP bestandje van:
  1. <?php
  2. mysql_connect('localhost','gebruikertje','wachtwoordje');
  3. mysql_select_db('testDB');
  4.  
  5. $getal = 1000000000000;
  6.  
  7. $formatted = number_format($getal,0,'','');
  8. echo $formatted;
  9.  
  10. echo "<br><hr><br>";
  11.  
  12. $select = mysql_query('SELECT * FROM `number_format_test`') or die ("Fout in SELECT: " . mysql_error());
  13.  
  14. if(mysql_num_rows($select) == 0) {
  15. mysql_query("INSERT INTO `number_format_test` (geld) VALUES ('" . $formatted . "')") or die ("Fout in INSERT: " . mysql_error());
  16. $type = 'INSERT';
  17. }
  18. else {
  19. mysql_query("UPDATE `number_format_test` SET `geld`='" . $formatted . "' WHERE `id`='1'") or die ("Fout in UPDATE: " . mysql_error());
  20. $type = 'UPDATE';
  21. }
  22.  
  23. $fetch = mysql_fetch_assoc($select);
  24. echo $type . ": " . $fetch['geld'];
  25. ?>


En je ziet het resultaat; het getal staat er prima, maar in de DB staat een 1.

Wie weet hoe ik dit kan oplossen?
Weet niemand het dan? 
Offline Thomas - 17/07/2007 10:43 (laatste wijziging 17/07/2007 10:43)
Avatar van Thomas Moderator Errr... number_format gebruik je alleen bij het afdrukken, niet bij het opslaan. Overigens zijn BIGINTs getallen, dus je kunt die quotes weglaten in je query. Wel dien je van tevoren te controleren of je met een getal te maken hebt. En BIGINT(255) is nogal onzinnig (en niet toegestaan?). BIGINT(20) (20-cijferig getal) lijkt mij groot genoeg?
Offline Ricky - 17/07/2007 13:21 (laatste wijziging 19/07/2007 20:16)
Avatar van Ricky PHP beginner Naja dat was maar een voorbeeldje... maar het punt is dus dat er in de DB alleen maar een 1 staat.

Weet iemand hoe ik dit kan oplossen?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.189s