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

SQL, INSERT INTO 3-tabele.

0 głosów
751 wizyt
pytanie zadane 18 lipca 2017 w SQL, bazy danych przez chmod96 Obywatel (1,380 p.)

Cześć, tworzę w PHP formularz rejestracji. Informacje pobrane z formularza będą zapisane do 3 różnych tabel.

Tabela: users (email, password)

Tabela: users_data (user_id, first_name, last_name)

Tabela: resore_password (user_id, support_questions, answer)

mam do tego użyć w PDO transakcji i wszystko jest OK. Tylko przy podawaniu wartości do zapytań SQL skąd mam mieć user_id ?

$sql_users = "INSERT INTO users ('email', 'password') VALUES (:email, :password)";
$sql_users_data = "INSERT  INTO users_data ('user_id', 'first_name', 'last_name') VALUES (:user_id, :first_name, :last_name)";
$sql_restore_password = "INSERT  INTO restore_password ('user_id', 'support_questions', 'answer') VALUES (:user_id, :support_questions, :answer)";

 

komentarz 18 lipca 2017 przez Arkadiusz Waluk Ekspert (291,530 p.)
A po co rozdzielasz to na trzy osobne tabele?
komentarz 18 lipca 2017 przez chmod96 Obywatel (1,380 p.)
Tak poprostu mam zaprojektowaną bazę danych.

2 odpowiedzi

0 głosów
odpowiedź 18 lipca 2017 przez Chess Szeryf (76,730 p.)

Napisz NULL, jeśli w tabeli masz ustawione na auto_increment, to automatycznie doda ci numer ID wyższy od poprzedniego o jeden.

komentarz 18 lipca 2017 przez chmod96 Obywatel (1,380 p.)

Nie o to mi chodzi, w tabeli user_data mam kolumnę user_id która bezpośrednio się odnosi do numeru id użytkownika w tabeli users.

komentarz 18 lipca 2017 przez Chess Szeryf (76,730 p.)

Może skojarz nazwę e-mail'a z user_id. Czy możesz wytłumaczyć to jaśniej, co konkretnie zamierzasz napisać/zrobić?

komentarz 18 lipca 2017 przez chmod96 Obywatel (1,380 p.)

Mam zapisać do trzech tabel informację które są powiązane relacjami 1 do 1, jeden użytkownik może mieć tylko 1 dane osobowe w tabeli users_data w tabeli users trzymam numer id użytkowników. 

Teraz gdy chcę zapisać dane równoczeście w trzech tabelach to skąd ma wziąć numer id użytkownika nowo dodanego żeby w 2 tabeli w kolumnie user_id móc go powiązać z użytkownikeim zz tabeli users

komentarz 18 lipca 2017 przez Chess Szeryf (76,730 p.)
Napisz zmienną w bazie i to powinno wystarczyć moim zdaniem.

https://dev.mysql.com/doc/refman/5.7/en/user-variables.html
0 głosów
odpowiedź 19 lipca 2017 przez chmod96 Obywatel (1,380 p.)

Zrobiłem to tak i działa laugh

        $conn->beginTransaction();

        // Users table
        $tableUsers = $conn->prepare("INSERT INTO users (email, password) VALUES (:email, :password)");
        $tableUsers->bindValue(':email', $_POST['email']);
        $tableUsers->bindValue(':password', $_POST['password']);
        $tableUsers->execute();

        $userID = $conn->lastInsertId();

        // Users Data table
        $tableUsersData = $conn->prepare("INSERT  INTO users_data (user_id, first_name, last_name) VALUES (:user_id, :first_name, :last_name)");
        $tableUsersData->bindValue(':user_id', $userID, PDO::PARAM_INT);
        $tableUsersData->bindValue(':first_name', $_POST['first_name']);
        $tableUsersData->bindValue(':last_name', $_POST['last_name']);
        $tableUsersData->execute();

        // Restore Password table
        $tableRestorePassword = $conn->prepare("INSERT  INTO restore_password (user_id, support_questions, answer) VALUES (:user_id, :support_questions, :answer)");
        $tableRestorePassword->bindValue(':user_id', $userID, PDO::PARAM_INT);
        $tableRestorePassword->bindValue(':support_questions', $_POST['support_questions']);
        $tableRestorePassword->bindValue(':answer', $_POST['answer']);
        $tableRestorePassword->execute(); 
        
        $conn->commit();

Jeżeli ktoś ma inny pomysł, Pisać!

Podobne pytania

0 głosów
0 odpowiedzi 666 wizyt
pytanie zadane 6 marca 2018 w SQL, bazy danych przez DinapeS Początkujący (340 p.)
0 głosów
1 odpowiedź 695 wizyt
pytanie zadane 28 maja 2016 w SQL, bazy danych przez Iras Obywatel (1,800 p.)
0 głosów
0 odpowiedzi 2,296 wizyt
pytanie zadane 25 lipca 2017 w SQL, bazy danych przez Szczur Nowicjusz (190 p.)

93,742 zapytań

142,680 odpowiedzi

323,299 komentarzy

63,328 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...