Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z aktualizacją danych w tylko, podkreślam tylko jednej kolumny w tabeli
Forum PHP.pl > Forum > Bazy danych > MySQL
PiterosWeb
Witajcie
Mam pewien, pewnie banalny problem. Ale męczę się już trochę i na prawdę nie rozumiem dlaczego to nie działa.
Zacznijmy może od tego że mam taką tabelkę w bazie danych:
  1. CREATE TABLE `charactersOnline` (
  2. `accountID` int(10) UNSIGNED NOT NULL,
  3. `characterID` int(10) UNSIGNED NOT NULL,
  4. `time` int(10) UNSIGNED DEFAULT NULL,
  5. `x` tinyint(3) UNSIGNED DEFAULT NULL,
  6. `y` tinyint(3) UNSIGNED DEFAULT NULL,
  7. `z` tinyint(3) UNSIGNED NOT NULL,
  8. `district` char(6) COLLATE utf8_unicode_ci NOT NULL,
  9. `hp` smallint(5) UNSIGNED DEFAULT NULL,
  10. `maxHP` smallint(5) UNSIGNED NOT NULL,
  11. `mp` smallint(5) UNSIGNED DEFAULT NULL,
  12. `maxMP` smallint(5) UNSIGNED NOT NULL,
  13. `attack` smallint(5) UNSIGNED NOT NULL,
  14. `defence` smallint(5) UNSIGNED NOT NULL,
  15. `mTowards` SET('0','1','2','3') COLLATE utf8_unicode_ci NOT NULL DEFAULT '0',
  16. PRIMARY KEY (`accountID`),
  17. UNIQUE KEY `UNIQUE` (`characterID`)
  18. ) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

I wykonuję na tej tabelce takie zapytanie:
  1. 'UPDATE `charactersOnline` SET `time`="'.time().'", `x`="'.$tmpx.'", `y`="'.$tmpy.'", `z`="'.$c[3].'", `district`="'.$c[4].'", `mTowards`="'.$towards.'" WHERE `characterID`="'.$_GET['cid'].'" LIMIT 1'


I teraz moje pytanie jest takie:
Dlaczego tylko kolumna o nazwie `mTowards` nie chce się aktualizować, tylko ta ponieważ wszystkie inne się zmieniają. Dodawałem nawet za kolumną `mTowards` inną i w niej następowała zmiana.
Uprzedzę kilka pytań:
Próbowałem na sztywno ustawić dane, bez skutku.
Zmienna $towards na pewno ma wartość, taką jak trzeba.
Zmieniałem także typ danych tej kolumny, na TINYINT, bez skutku.
W tym momencie nawet wartość Domyślna, którą jest '0' nie jest wpisywana w tą kolumnę.

No i ostatnia kwestia, z poziomu phpmyadmin czy też MySQL Workbench, mogę wprowadzić zmianę w tej kolumnie.


Wie ktoś może co jest nie tak questionmark.gif
trueblue
  1. `mTowards`=\'"'.$towards.'"\'
?
PiterosWeb
To na pewno nie, jak już to:
  1. mTowards`=\''.$towards.'\'

ale to też nie działa.
Sprawdziłem twoją teorię, bo już sprawdzam dosłownie wszystko.
Zmieniałem nawet nazwe kolumny, ale to też nic nie daje. biggrin.gif
trueblue
Tak, tak, masz rację.

Wydrukuj zapytanie na ekran przed jego wykonaniem.
PiterosWeb
Robiłem już to wink.gif
Oto jedna z opcji
UPDATE `charactersOnline` SET `time`="1405445538", `x`="1", `y`="3", `z`="30", `district`="001001", `mTowards`="0" WHERE `characterID`="2" LIMIT 1
trueblue
Zamień w zapytaniu wszystkie pojedyncze ciapki z podwójnymi.

EDIT:
Mam na myśli oczywiście te:
  1. "UPDATE `charactersOnline` SET `time`='".time()."',
PiterosWeb
Wiem co masz na myśli ale to samo uzyskam wstawiając zamiast apostrofów \', a to nic nie daje
trueblue
No, to jak uważasz, ja testowałem na mysqli i przy pojedynczych apostrofach wokół wartości jest ok, przy cudzysłowach nie działa.
Problem przy mysqli, korzystając z PDO jest ok.
PiterosWeb
Sprawdziłem i nie pomaga, jedyne co się zmieniło, bo trochę kombinowałem i nie ważne czy dam w apostrofach czy w cudzysłowiu to mi wstawia wartość, ale tylko gdy jest na sztwyno, gdy dam jako liczbę czyli bez cudzysłowia czy apostrofu to wstawia mi wartość domyślną.
Próbowałem też rzutowania w PHP na stringa ale to też nic nie daje. :/

Już sobie poradziłem, błąd był głupi. Można powiedzieć że patrzyłem zbyt blisko. Sprawę kopało inne zapytanie, które wykonywane było zaraz po wykonaniu tego.
Przeoczyłem to ponieważ wszystko jest wywoływane w tle, za pomocą AJAX'a, i nie koniecznie jest jedno z drugim powiązane po stronie klienta.

Błąd polegał na tym że wysyłałem drugie rządanie do serwera, które miało na celu zaktualizować tylko tą jedną kolumnę.
I aktualizowało, z tym że przy wysyałniu tego drugiego rządania był problem ponieważ zrobiłem literówkę w nazwie zmiennej i wysłał do serwera 'undefined', dlatego zostawiało puste pole.
Takie małe przypomnienie że czasem trzeba nieco szerzej spojrzeć biggrin.gif

Mimo wszystko Wielkie dzięki za pomoc smile.gif
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.