![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 22.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam wszystkich,
Mam pewien problem dotyczący PHP i MySQL'a. Wykonuję pewną aplikację w PHP i stanąłem w pewnym momencie. Mam powiedzmy 5 tabel, (które w skrócie przedstawiam poniżej): KOMENTARZE id_komentarza PK treść_komentarza data_dodania UZYTKOWNIK id_uzytkownika PK imię nazwisko SPRZĘT id_sprzętu PK nazwa_sprzętu KOMENTARZE_UZYTKOWNIKÓW id_użytkownika FK id_komentarza FK KOMENTARZE_SPRZETU id_sprzetu FK id_komentarza FK Problem polega na tym, że chcę, aby zalogowany użytkownik mógł dodawać komentarze dla konkretnych sprzętów. Mam wydobyte id_użytkownika i id_sprzętu. Potrzebuję jeszcze zdobyć id_komentarza, które dodawane jest automatycznie jako AUTOINCREMENT. Po wypełnieniu formularza dodającego komentarz i kliknięciu - "dodaj komentarz" powinny zostać zapisane dane do tabeli KOMENTARZE oraz do tabel pośrednich KOMENTARZE_UZYTKOWNIKOW i KOMENTARZE_SPRZETOW. Nie ma problemu z zapisem danych do tabeli KOMENTARZE, ale za to nie wiem jak zapisać dane do pozostałych w/w dwóch tabel pośrednich. Myślałem żeby stworzyć może jakiś trigger, ale nie wiem czy jest to dobre rozwiązanie, a poza tym żeby zapisać dane do tabel pośrednich - muszę znać id_komentarza, które w danym momencie zapisuję - i to jest największy chyba problem. W jaki sposób mogę podczas zapisywania tabeli, wyciągnąć jej id (id_komentarza), gdy id jest AUTOINCREMENT? Czy mógłby mi ktoś podpowiedzieć, w jaki sposób powinienem to wykonać? Z góry dzięki za pomoc. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 174 Pomógł: 42 Dołączył: 22.07.2007 Skąd: /dev/random Ostrzeżenie: (0%) ![]() ![]() |
Cytat Nie sprawdzałem jeszcze tego, ale zakładam że działa (dzisiaj sprawdzę), ale tak czy inaczej jeśli zrobię zarówno insert do tabeli komentarze jak i komentarze_uzytkowników, to nie jest rozwiązany problem transakcji - co się stanie, jeśli w tej samej sekundzie inna osoba doda komentarz? Może być tak, że pierwsza osoba doda komentarz, a wpisze się id komentarza do tabeli komentarze_użytkowników dla innej osoby - drugiej osoby, która w tym samym momencie dodała komentarz. Baza danych jest odpowiedzialna za spójność danych. W dokumentacji jest napisane Cytat The ID that was generated is maintained in the server on a per-connection basis. This means that the value returned by the function to a given client is the first AUTO_INCREMENT value generated for most recent statement affecting an AUTO_INCREMENT column by that client. This value cannot be affected by other clients, even if they generate AUTO_INCREMENT values of their own. This behavior ensures that each client can retrieve its own ID without concern for the activity of other clients, and without the need for locks or transactions. na chłopski rozum oznacza to, że każdy klient otrzyma ID, które nie będzie kolidować z innymi połączeniami. Użyj transakcji aby uzyskać efekt atomowości. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 22.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Baza danych jest odpowiedzialna za spójność danych. W dokumentacji jest napisane na chłopski rozum oznacza to, że każdy klient otrzyma ID, które nie będzie kolidować z innymi połączeniami. Użyj transakcji aby uzyskać efekt atomowości. Dobra dzięki za pomoc. PHP i MySQL dopiero zaczynam się uczyć od 1,5 miesiąca więc nie wiem jeszcze wielu rzeczy i stąd takie pytania. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 2.10.2025 - 18:21 |