• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[PHP, MySQL] Umieszczanie danych z formularza w dwóch tabelach bazy

0 głosów
264 wizyt
pytanie zadane 13 lipca 2018 w SQL, bazy danych przez wanttobeanengineer Obywatel (1,120 p.)

Witam serdecznie,

sam nie wiem czy powinienem posta umieścić w kategorii SQL czy PHP.

Chodzi o to, że posiadam formularz rejestracji, dane z tego formularza wysyłam do bazy danych, problem polega na tym że potrzebują one dwóch tabel. W jednej (adresy_email) przechowuje adresy email (id, adres), w drugiej (users) dane użytkownika (login, hasło, id_adresu_email).
W tabeli users nie przechowuję całych adresów e-mail a jedynie ich ID z tabeli adresy_email. 
W pierwszej kolejności zapisuje adres do tabeli adresy_email, następnie pozostałe dane w tabeli users, jednak potrzebuję ID adresu z tabeli adresy_email. 
Mógłbym to zrobić prostym zapytaniem:
 

SELECT id FROM adresy_email WHERE adres = adres_z_formularza;

Jednak ciekawi mnie czy jest na to jakiś lepszy sposób, bez przeszukiwania całej tabeli w poszukiwaniu jednego konkretnego ID.
Mógłbym to zrobić również pobierając ostatnie wstawione ID, znalazłem do tego nawet funkcję:
 

SELECT LAST_INSERT_ID();

Ale wydaje mi się, że może ona przysporzyć sporo problemów, no bo co jeśli w tym samym momencie dwóch użytkowników będzie chciało się zarejestrować i stanie się tak, że najpierw pójdzie INSERT do tablicy adresy_email pierwszego użytkownika, później INSERT do tablicy adresy_email drugiego użytkownika, a dopiero później funkcja LAST_INSERT_ID() pierwszego i drugiego użytkownika? Wtedy dwaj użytkownicy będą mieli przypisany ten sam adres. Czy jest możliwe wystąpienie takiego błędu? Jak go uniknąć?

2 odpowiedzi

0 głosów
odpowiedź 13 lipca 2018 przez Bosswell Nałogowiec (35,810 p.)
Czy przechowywanie adresu email w osobnej tabeli ma sens? Ale powiedzmy, że tego potrzebujesz. Samo pobranie ostatniego id jest jak najbardziej ok, ponieważ musisz je znać. A co do twojego problemu z kolidacją. Silnik InnoDB w mysql wspiera mechanizm transakcji. Poczytaj o nim. Generalnie chodzi o to, że na czas transakcji blokowane są wiersze na których pracujemy i albo wykonywane są wszystkie operacje, albo w ogóle.
0 głosów
odpowiedź 14 lipca 2018 przez mordimer Mądrala (5,720 p.)
Nie potrzebnie kombinujesz ... da sie tak zrobić jak chcesz ale trzymaj tego emaila z danymi usera bo tam jego miejsce... https://pl.wikipedia.org/wiki/KISS_(regu%C5%82a)

Podobne pytania

0 głosów
1 odpowiedź 85 wizyt
pytanie zadane 1 kwietnia 2021 w PHP przez niezalogowany
0 głosów
0 odpowiedzi 207 wizyt
pytanie zadane 5 września 2018 w PHP przez tomek0094 Nowicjusz (120 p.)
+1 głos
1 odpowiedź 90 wizyt

88,311 zapytań

136,904 odpowiedzi

305,517 komentarzy

58,593 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...