Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]zapytanie MYSQL -wywala error, z powodu zbyt długiej wartości
matimax
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 11.02.2016

Ostrzeżenie: (0%)
-----


Mam pewien problem, który wygłąda następująco: Po kliknięciu danego przycisku, strona przesyła trzy wartości do innych kolumn. Chodzi dokładniej o same liczby, jednak są to bardzo duże liczby. Gdy liczba jest nie duża, nie ma problemu, jednakże gdy np. wartość 1: 321.456.789.123.456 , 2 wartość podobnego rozmiaru i trzecia też to już wyskakuje błąd .

Przykład z innymi wartościami i błąd:
Message: SQL Error: Out of range value for column 'kolumna3' at row 1

Query Code: UPDATE baza_danych SET kolumna1= kolumna1- 1.7105114972088E+14, kolumna2= kolumna2- 1.9002036318352E+14, kolumna3= kolumna3- 1.9002036318352E+14 WHERE id = 1;

Jak mogę rozwiązać ten problem? Próbowałem zmienić w strukturach bazy danych typ na bigint(20) albo double(50,6) jednakże błąd się powtarza. Pola te mają obsługiwać jedynie ogromne liczby.

Ten post edytował matimax 11.02.2016, 17:22:41
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
matimax
post
Post #2





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 11.02.2016

Ostrzeżenie: (0%)
-----


debian-7.0.32bity--RepoPL, jeśli dobrze Cię zrozumiałem.
To jest najtańszy serwer VPS mintshost, który służy mi do nauki.
gdy wprowadzę tak duże kwoty np. 150.000.000.000.000 x 3 to wchodzi ok, a gdy np. 148.531.561.971.675 x 3 to już błąd ;/. Czy da się to jakoś zrobić tak, żeby przyjmowała baza takie duże wartości? w mysql, zlotowka, funt, dolar są typami: bigint (20) , atrybut- unsigned. Czy może jak zmienie na inne wartości np. bigint z wartością (100) lub na double będzie to działać poprawnie?...

Edit: Może żeby było jaśniej, chciałem zrobić coś na zasadzie prostego banku na stronie, w który można wpłacać wirtualne pieniądze, a potem je wypłacać. czyli praktycznie coś prostego, co dziwne, wpłata takich dużych wartości odbywa się bez problemu, przy okazji zabierając 20% wpłacanej kwoty. pojawia sę normalnie w banku, a przy wypłacie już jest problem.


EDIT:
Można powiedzieć, że problem jest "rozwiązany". Wydaje mi się, że cos schrzaniłem w php z zapytaniaim, bo działają mi dwie waluty, tylko z jedną jest problem i tylko przy wypłacie.

Jednak dupa, siedzę nad tym już trzeci dzień i nie wiem co jest nie tak, zmieniałem już typy kolumny w tabeli ale to nie pomagało..
może coś jest zle w kodzie? poniżej kod odpowiadający za wypłatę:

  1. function out()
  2. {
  3. global $USER, $MIASTO, $CONF, $waluta;
  4.  
  5. $action = HTTP::_GP('action', '');
  6.  
  7.  
  8. $mZloty = $USER['bankz'];
  9. $mFunt = $USER['bankf'];
  10. $mDolar = $USER['bankd'];
  11.  
  12.  
  13. if ($action == 'out') {
  14. $bZloty = max(0, round(HTTP::_GP('zloty', 0.0)));
  15. $bFunt = max(0, round(HTTP::_GP('funt', 0.0)));
  16. $bDolar = max(0, round(HTTP::_GP('dolar', 0.0)));
  17.  
  18.  
  19. if($bZloty < '0'){$this->printMessage('error_1', 'game.php?page=logout');}
  20.  
  21. elseif($bFunt < '0'){$this->printMessage('error_2', 'game.php?page=logout');}
  22.  
  23. elseif($bDolar < '0'){$this->printMessage('error_3', 'game.php?page=logout');}
  24.  
  25. elseif($bZloty == '0' && $bFunt == '0' && $bDolar == '0'){$this->printMessage(['wprowadz jakąś kwotę'], 'game.php?page=bank');}
  26.  
  27. elseif($bZloty > $mZloty){$this->printMessage($LNG['error_out_1'], 'game.php?page=bank', 3);}
  28.  
  29. elseif($bFunt > $mFunt){$this->printMessage($LNG['error_out_2'], 'game.php?page=bank', 3);}
  30.  
  31. elseif($bDolar > $mDolar){$this->printMessage($LNG['error_out_3'], 'game.php?page=bank', 3);}
  32.  
  33. else{
  34.  
  35. $Miasto[$waluta[101]] += $bZloty;
  36. $Miasto[$waluta[102]] += $bFunt;
  37. $Miasto[$waluta[103]] += $bDolar;
  38. $GLOBALS['DATABASE']->query("UPDATE ".USERS." SET
  39. bankz = bankz - $bZloty,
  40. bankf = bankf - $bFunt,
  41. bankd = bankd - $bDolar
  42. WHERE id = ".$USER['id'].";");
  43. $this->printMessage( 'Zdeponowano '.$bZloty .' Zlotych, '. $bFunt .' Funtów i '. $bDolar .' Dolarow.', 'game.php?page=bank');
  44. }
  45.  
  46. }
  47.  
  48. $this->tplObj->assign_vars(array(
  49.  
  50.  
  51. 'bankz' => $USER['bankz'],
  52.  
  53. 'bankc' => $USER['bankf'],
  54.  
  55. 'bankd' => $USER['bankd'],
  56.  
  57.  
  58. ));
  59. $this->display('bank_out.tpl');
  60. }


Ten post edytował matimax 12.02.2016, 16:58:08
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.10.2025 - 18:45