Witam,
Mam następujący problem. Piszę w chwili obecnej skrypt ankiety. Będę chciał, aby użytkownikowi nie wyświetlać wszystkich na raz pytań tylko podzielić je na kilka ekranów. Pola, które już użytkownik wypełni będę chciał zapisywać w bazie. Chciałbym tutaj wykorzystać transakcje. Co jednak się stanie gdy użytkownik nie zakończy ankiety i tak po prostu wyłączy przeglądarkę. Czy istnieje coś takiego aby ustawić czas, po którym system sam wyda polecenie rollback? Pytanie dotyczy MySQL’a.
Dzięki za odpowiedź.
msulik
8.11.2003, 01:57:25
Może to odpowiedź nie na temat, ale czy nie lepiej zastosować sesje?
Jabol
8.11.2003, 11:17:49
wydaje mi się, że wszystkie zapytaina które dostaną commit są traktowane jako rollback
delorian
10.11.2003, 00:13:09
Wszystkie zapytania, które nie dostaną commit są oczywiście traktowane jako rollback. Jednak wtedy gdy istnieje ciągłe połączenie z bazą danych, tak jak to może występować w przypadku serwisów internetowych, rollback nie jest domyślny, przynajmniej do czasu zamknięcia połączenia, co czasem może wystąpić po długim okresie. Próbowałem cosik znaleźć na ten temat w dokumentacji, ale nie za bardzo jest co. Więc teoretycznie fajnie by było taki rollback wykonać co jakiś czas, np. przed zakończeniem połączenia w wywołaniu mysql_close, ale nie piszą jak to by wszystko działało. W takim przypadku rozwiązanie wykorzystujące sesje php jest chyba lepsze.
Hmm... chyba faktyczne lepsze beda sesje. Mam w zwiazku z tym nastepujace pytanie. W jaki sposob zaprojektowac baze danych. Czy uzasadnione jest stosowanie np. jakiejs tabeli tymczasowej, w ktorej bede przechowywal aktualny stan wypelniania ankiety a dopiero po zakonczeniu przy ostatnim ekranie przekopiuje dane z tej tabeli tymczasowej do mojej glownej tabeli. Wowczas w mojej 'ostatecznej' tabeli pozbede sie sytuacji w ktorej bede mial puste rekordy czyli czegos co nie powinno byc w bazie danych. Tabele tymczasowa bede mogl sobie co jakis czas wyczyscic aby nie zbierac smieci. Czy stosowanie tymczasowych tabel np. w podobnych lub tez innych projektach jest stosowane/dopuszczalne?
Dzieki za dotychczasowe odpowiedzi i te nastepne.
adwol
10.11.2003, 13:32:27
Wyniki cząstkowe trzymaj w zmiennych sesyjnych. A je możesz trzymać np. w bazie w specjalnej tabeli o takim schemacie:
[sql:1:2fbd55b770]create table sesje (session_id char(32), dane text)[/sql:1:2fbd55b770]
Funkcja
session_set_save_handler pozwala na ustawienie swoich funkcji obsługujących przechowywanie danych w sesji, więc nie powinieneś mieć z tym problemu.
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.