2016-08-02 1 views
-2

У меня есть две таблицы. Один из них - user_info, а другой - user_login. Я хочу вставить данные в обе эти таблицы в одном запросе, используя внутреннее соединение. Данные поступают от регистрации пользователя.Вставка в две таблицы с использованием одного запроса внутреннего соединения

Мой Войти таблице:

user_id(pk) user_name user_password 
1   jinesh  secret 
2   mahesh  secret 

Моя информация таблица:

user_id(fk) name  address phno 
    1  jinesh n banglore 9845*** 
    2  mahesh m chennai 7345** 
+1

Вы не можете вставить в несколько таблиц с помощью одного запроса. Однако вы можете объединить несколько запросов в одну транзакцию, если вы пытаетесь достичь соответствия ACID. – eggyal

+0

Вы не можете вставлять данные в несколько таблиц с одним запросом – DestinatioN

+0

, вы можете это сделать. Вы должны отделить запросы; –

ответ

1

Вы не можете сделать один запрос insert значений в two tables

Однако, если вы хотите иметь два запросов только в одном заявлении, тогда это можно сделать, если вы разделите выписки с помощью ;

$query = "insert into table_1 (data1, data2) values ('value1', 'value2');insert into table_2 (data1,data2) values ('value1', 'value2')"; 
+0

Как насчет 'user_id (p)' и 'user_id (fk)'? Будет ли он автоматически вставляться? – jonju

+0

@jonju, в чем проблема с этими 2? Вышеприведенный запрос является только примером столбцов и значений. Операция должна отредактировать два запроса в его потребностях. –

+0

Этот экзамен не будет работать, если 'user_id' является AUTO_INCREMENT. Лучше сообщить людям, что «Do's and Do not», – jonju

0

Лучший способ - использовать Stored Procedure.

CREATE PROCEDURE `Proc_User` (IN username VARCHAR(225), IN password VARCHAR(255), 
IN uname VARCHAR(255),IN addr VARCHAR(255),IN phno VARCHAR(20)) 
BEGIN 
    DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING 
    BEGIN 
    -- ERROR or WARNING 
    ROLLBACK; 
    END; 
    START TRANSACTION; 
    DECLARE userid INT; 
    INSERT INTO login (user_name,user_password) VALUES(username,password); 

    SET userid = (SELECT LAST_INSERT_ID()); 

    INSERT INTO info(user_id,name,address,phno) 
    VALUES(userid,uname,addr,password); 
    COMMIT; 
END 

И вызвать хранимую процедуру в PHP

$proc = mysqli_prepare('CALL Proc_User(?, ?, ?,?,?);'); 
mysqli_stmt_bind_param('sssss', $username, $password, $name,$address,$phoneno); 
mysqli_stmt_execute($proc);