Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z Incorrect integer value
Forum PHP.pl > Forum > Bazy danych > MySQL
mrm
Witam postanowiłem zaktualizować swój serwer www (lokalny) do wersji phpmyadmin-a 2.11.4 i mysql-a do 5.0.45

Niestety pojawiły się problemy z bazą danych:

1) dotyczące kodowania (udało się rozwiązać)

2) dotyczące typu 'integer'.

Mam pewien system (który działał prawidłowo na starszej bazach mysql 3..,4..) teraz pojawia się problem przy 'insercie' danych. Mam w tablicy pole 'value' typu int o długości 11 null domyślnie 0, gdy wprowadzam wartość w formularzu wszytko działa ok, natomiast gdy pozostawiam pole puste pojawia się błąd bazy danych Incorrect integer value,

Bardzo zależy mi na tym aby pole to mogło być puste, jedyne co udało mi się wymyślić i działa to zmienić typ pola na "var" ale to nie jest rozwiązuje problemu.
nevt
błąd się pojawia prawdopodobnie dlatego, że próbujesz przypisać do tego pola pusty łańcuch znakowy (to co dostajesz z formularza). powinieneś podstawiać stałą NULL (przy UPDATE) lub pomijać to pole przy INSERT, np.
  1. UPDATE tabela SET pole_int = '' WHERE ... - wyskoczy błąd
  2. INSERT INTO tabela (pole_txt, pole_int) VALUES ('', '') - wyskoczy błąd
  3.  
  4. UPDATE tabela SET pole_int = NULL WHERE ... - powinno BYć ok
  5. INSERT INTO tabela (pole_txt) VALUES ('');

czyli musisz sprawdzać, co przyszło z formularza i dla pustego pola odpowiednio modyfikować zapytanie...
mrm
podejrzewam że to spokojnie pomoże (jeszcze nie sprawdzałem) jednak wolałbym rozwiązać problem w nieco inny sposób ... tzn nie chciałbym modyfikować moich skryptów (system jest dosyć duży, wiele formularzy wiele operacji na bazie) zależałoby mi aby zmodyfikować tak bazę danych aby nie trzeba było ingerować w kod ... o ile to możliwe
nevt
tak się nie da - albo rybki albo akwarium - z jednej strony piszesz, że chcesz bazę (pole) zostawić bez zmian (czyli typ INTEGRER NULL) i np. zmiana na VARCHAR nie wchodzi w grę. z drugiej strony piszesz, że ze zmianą kodu w PHP jest za dużo zachodu. więc chciałbyś jakoś tajemniczo i magicznie, żeby pusty string sam zamieniał się w NULL albo żeby typ CHAR pasował do pola INT. Jeżeli nie chcesz niczego zmieniać, poszukaj hostingu z jakąś bardzo starą wersją MySQL ...
kitol
Czy w tym przypadku nie pomógłby trigger zamieniający pusty string na nulla?
nevt
pomyślełem o tym samym i sprawdziłem wczoraj - niestety - typy pół są porównywane jeszcze zamim odpala się trigger before - wywalany jest błąd a trigger się nawet nie odpala... zupełnie inna kwestia, to niekonsekwencja zespołu MySQL - skoro już jest kowersja 'w locie' ze string na int to generowanie błędu (zamiast ostrzezenia) dla pustego stringu jest niezrozumiale...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.