• 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

VPS Starter Arubacloud
0 głosów
323 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 (36,470 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ź 384 wizyt
pytanie zadane 1 kwietnia 2021 w PHP przez niezalogowany
0 głosów
0 odpowiedzi 325 wizyt
pytanie zadane 5 września 2018 w PHP przez tomek0094 Nowicjusz (120 p.)
+1 głos
1 odpowiedź 210 wizyt

92,970 zapytań

141,934 odpowiedzi

321,168 komentarzy

62,299 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...