• 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
312 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ź 257 wizyt
pytanie zadane 1 kwietnia 2021 w PHP przez niezalogowany
0 głosów
0 odpowiedzi 303 wizyt
pytanie zadane 5 września 2018 w PHP przez tomek0094 Nowicjusz (120 p.)
+1 głos
1 odpowiedź 185 wizyt

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...