Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Microsoft SQL Server - podwójne wpisy do bazy
malisz
post 2.10.2003, 12:02:36
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 10.04.2002
Skąd: Gdynia

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


Witam,
Pierwszy raz spotykam się z tym problemem, i nie potrafię go racjonalnie wytłumaczyć. Żeby było śmieszniej nie dzieje się to za każdym razem, ale co 5 - 10 raz.
Teraz o co chodzi.

taki krótki kod:
...
$sql = "INSERT INTO temptable (nazwa) values ('abc')";
$result = mssql_query($sql, $DB);
...

czasem wstawia od razu 2 takie same rekordy, mimo ze wywolanie nastepuje tylko raz. Siedziałem nad tym całą noc i testowałem wszelakie rozwiązania, ze sprawdzaniem czy istnieje, z indeksami na nazwe... wszystko co mi przyszło na myśl. Jeżeli mam założony indeks na nazwe to przy wstawieniu rekordu (oczywiście nie zawsze) baza zgłasza błąd : rekord o podanym indeksie już istnieje, ale dlatego, że rekord został wstawiony, a błąd wyświetlany jest przy drugiej samoczynnej próbie wstawienia rekordu. Dlaczego tak się dzieje. Mam też SQL Server na drugim kompie i jest dokładnie tak samo. Czy ktokolwiek domyśla się w czym problem? To dla mnie bardzo ważne.
Mam nadzieje ze z tego co napisalem chociaz troche wiadaomo o co chodzi smile.gif

Z góry dzięki za odpowiedź.
Go to the top of the page
+Quote Post
scanner
post 2.10.2003, 12:09:25
Post #2





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




php Pro -> Bazy danych


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
spenalzo
post 2.10.2003, 12:09:53
Post #3





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


"php Pro: Inżynieria programowania w php, strategie budowy aplikacji." - jesteś pewień że umieściłeś posta w dobrym miejscu?


--------------------

Go to the top of the page
+Quote Post
malisz
post 2.10.2003, 12:13:50
Post #4





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 10.04.2002
Skąd: Gdynia

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


sorry, nie pisałem na tym forum chyba od roku
Go to the top of the page
+Quote Post
malisz
post 2.10.2003, 18:12:40
Post #5





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 10.04.2002
Skąd: Gdynia

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


nikt nic nie wie na ten temat? Ludzie, prosze skupcie sie smile.gif
Go to the top of the page
+Quote Post
uboottd
post 2.10.2003, 19:08:08
Post #6





Grupa: Zarejestrowani
Postów: 384
Pomógł: 0
Dołączył: 3.04.2003
Skąd: Chorzow

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


Dlaczego mamy sie skubac ?

Przy tak malych informacjach ciezko powiedziec.

Ja bym stawial na to, ze dwa razy wykonujesz kod wstawiania dla tych samych danych, bo np. osoba wpisujaca zrobila reload podczas wpisywania i wyslales sobie po raz drugi te same dane z tego samego formularza. Zreszta poniewaz mysle ze nawet MS MSQL nie jest tak durny zeby na wszelki wypadek powtarzac komende, to winy bym szukal w skrypcie.
Go to the top of the page
+Quote Post
malisz
post 2.10.2003, 19:34:29
Post #7





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 10.04.2002
Skąd: Gdynia

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


Kod ma 3 linijki, błąd nie zachodzi za każdym razem (jak pisałem wcześniej)
Zaobserwowałem, że sytuacja pojawia się w momencie gdy zbyt szybko po sobie następują operacje INSERT. Nie ma żadnego przeładowania strony. Raz wykonana komenda mssql_query() wsatwia 2 takie same rekordy (oczywiście nie zawsze). Powiem więcej, połączyłem sie do MSSQL'a przez odbc i jest dokładnie to samo.
Wstwiam rekord za rekordem i czasem rekord jest wpisywany dwukrotnie.
Jak wspominalem dzieje sie to na dwoch maszynach, zmieniałem wersje php'a, probowalem przez ODBC... i wydaje mi się ze jest to jakas wlasciwosc MS SQL'a. Jakiś parametr w bazie? Nie wiem, dlatego prośba o pomoc. Proszę też żeby nie podsuwać takich uwag jak ta powyżej, ze kod wykonuje sie 2 razy, albo klient przeladowuje strone i tak dalej. Pisalem juz pod roznymi bazami i troche doswiadczenia w tym mam. Pod MSSQL pisze pierwszy raz i nie rozumiem dlaczego wystepuje taki problem. Z gory dzieki za pomoc.
Go to the top of the page
+Quote Post
uboottd
post 2.10.2003, 20:00:47
Post #8





Grupa: Zarejestrowani
Postów: 384
Pomógł: 0
Dołączył: 3.04.2003
Skąd: Chorzow

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


Nie wierze zeby baza sama z siebie podwojnie wykonywala jakies zapytanie, bo jesli by tak robila to juz dawno by to ktos wytknal developerom tej bazy i juz by nie robila czegos tak glupiego.

Ja bym zalozyl ze baza jednak dostaje to zapytanie dwa razy i zaczal od analizy skryptu kiedy moze taka sytuacja wystapic. A zasugerowalem podwojne zaladowanie strony bo to najczestsza pulapka z jednej strony, a z drugiej skad mam wiedziec ze rozmawiam z ekspertem ? Skoro jestes tego pewien to ok. Znaczy ze blad jest ciekawszy, ale dales za malo danych zeby go znalezc. Byc moze jest jakis drobny haczyk w uzywaniu tablic tymczasowych lub ogolnie w interfejsie do bazy. Trzeba by dokladnie zbadac juz szczegoly mssqlowe...
Go to the top of the page
+Quote Post
adwol
post 2.10.2003, 22:34:46
Post #9





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

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


Moje sugestie:
:arrow: Wstaw sobie tuż przed wysłaniem zapytania jakiegoś debuga, który będzie Ci wypisywał coś na ekran. To tak żeby na 100% wykluczyć ew. wykonanie dwa razy tego kodu.
:arrow: Zobacz czy nie masz zdefiniowanego w bazie jakiegoś zrąbanego triggera, który wyzwalany Twoim insertem dokłada dodatkowy wiersz (o ile MSSQL ma takie coś jak triggery, nie znam się na tym DBMSie więc jeśli nie ma to ten punkt odpada)
Go to the top of the page
+Quote Post
malisz
post 2.10.2003, 22:46:46
Post #10





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 10.04.2002
Skąd: Gdynia

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


mam debuga, kod jest wykonywany tylko raz, na BANK!
MSSQL ma trigery, ale nie mam zadnych zdefiniowanych.
Najdziwniejsze w tym wszystkim jest to, że problem nie pojawia się za każdym razem.
Go to the top of the page
+Quote Post
adwol
post 2.10.2003, 22:57:05
Post #11





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

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


Cytat
mam debuga, kod jest wykonywany tylko raz, na BANK!
MSSQL ma trigery, ale nie mam zadnych zdefiniowanych.
Najdziwniejsze w tym wszystkim jest to, że problem nie pojawia się za każdym razem.

Ok, czy jesteś w stanie przeprowadzić dość powtarzalne eksperymenty? Znaczy, czy zdarza się to na tyle często, że po kilku/kilkunastu próbach jesteś w stanie stwierdzić czy dalej jest błąd czy sie poprawiło?

Jeśli tak, to spróbuj wyizolować problem. Okastrowuj ten kod ze zbędnych rzeczy tak długo aż ograniczysz się do kilku zapytań lub problem nagle zniknie. Dążę do tego, aby pozostało jak najmniej kodu i żeby dało się wtedy testować każde zapytanie po kolei.

Problem może być kontekstowy, będzie istniał tylko jeśli zostaną wydane konkretne zapytania i to w konkretnej kolejności. Spróbuj więc jak już okastrujesz ten kod wydać te zapytania bezpośrednio z konsoli administracyjnej MSSQL lub innego programu tego typu do bezpośredniej interakcji z bazą. To pozwoli określić gdzie jest błąd, bo może sterownik PHPowy do MSSQLa jest wadliwy.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 15:58