![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 600 Pomógł: 2 Dołączył: 1.09.2002 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Natrafiłem ostatnio na stronie php5_pl , na skrypt który pokazuje liczbe osób online... Przerobiłem odrobine skrypt...(dodalem moją funkcje sql() zamiast mysql_query() )...
Problem w tym, że funkcja pokazuje komunikat "Duplicate entry"... Jest mozliwośc zlożenia zapytania w ten sposób, aby w przypadku, gdy rekord z takim kluczem istnieje, żeby polecenie "INSERT" ne bylo realizowane? Czy pozostaje tylko zastosowac zapytanie "SELECT" sprawdzające czy klucz nie istnieje? P.S. W takim razie po co ten kawalek kodu: "if (!mysql_affected_rows()) "...? Ten post edytował kukix 7.03.2007, 17:00:44 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Cytat Pierwszym zapytaniem usuwamy wszystkie rekordy, ktre są starsze niż 1 minuta, a następnie próbujemy dodać nowy rekord zawierający adres IP klienta i aktualną datę. W przypadku, gdy rekord nie został dodany (co jednoznacznie mówi nam o tym, że rekord o podanym adresie IP już istnieje w bazie), dokonujemy modyfikacji istniejącego rekordu zmieniając pole 'time' na aktualną datę i czas. No jest ok bo w przypadku niedodania rekordu bo wymuszenie integralnosci przez PK na ip powoduje blad i warunek if (!mysql_affected_rows()) jest spelniony wiec logicznie aktualizuje rekord. Juz pomijajac ze moze byc blad podczas dodawania. Zapis z DELETE, SELECT a potem INSERT lub UPDATE jest dluzszy i moze byc mniej optymalny chociasz to jest tabela userow on line gdzie tak naprawde trudno zeby jakis serwis osiagnal wielka ilosc. Jedni to takich rzeczy uzywaja select a potem insert update albo insert i lapanie bledu lub sprawdzanie ile rekordow zmodyfikowal. -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 17.06.2025 - 13:09 |