2011-04-29 2 views
0

사용자가있는 사용자 양식 사용자가 다음 세부 정보를 입력하십시오.어쨌든 단일 MySQL 쿼리를 사용하여 여러 테이블에 레코드를 삽입 할 수 있습니까?

a) 사용자 이름 b) 암호 c) 전자 메일

전자 메일이 contacts 테이블에 속하는 반면 사용자 이름과 암호는 users 테이블에 속하지만 사용자 테이블에는 외래 키가 있습니다 연락처의 기본 키 ID를 저장하는 contact_id. 사용자가 양식을 제출할 때마다 두 개의 다른 테이블에 레코드를 삽입하기 위해 두 개의 MySQL 쿼리를 만들어야합니다.

다음은 내가 사용하는 것입니다.

$sth = $this->dbh->prepare("INSERT INTO contacts(email) VALUES(:email)"); 

두 번째 쿼리 :

$sth = $this->dbh->prepare("INSERT INTO users(username,password,registerdate,activationString,contact_id) VALUES(:username,:password,NOW(),:activationString,".$this->dbh->lastInsertId().")"); 

어쨌든 나는 두 개가 아닌 하나의 쿼리를 만들 수 있습니까? MySQL last_insert_id() 함수를 활용한다. ?

감사합니다

+0

나는 그렇게 생각하지 않는다. – jimy

답변

2

INSERT 문이 하나 개의 테이블에 삽입 할 수 있습니다 감사합니다.

하지만 작업을 수행하기 위해 저장 프로 시저를 만들 수 있습니다.

예 :

CREATE TABLE contacts(
    id INT(11) NOT NULL AUTO_INCREMENT, 
    email VARCHAR(255) DEFAULT NULL, 
    PRIMARY KEY (id) 
); 

CREATE TABLE users(
    id INT(11) NOT NULL AUTO_INCREMENT, 
    username VARCHAR(255) DEFAULT NULL, 
    `password` VARCHAR(255) DEFAULT NULL, 
    registerdate DATE DEFAULT NULL, 
    activationString VARCHAR(255) DEFAULT NULL, 
    contact_id VARCHAR(255) DEFAULT NULL, 
    PRIMARY KEY (id) 
); 

DELIMITER $$ 

CREATE 
PROCEDURE add_new_user(IN p_username   VARCHAR(255), 
         IN p_password   VARCHAR(255), 
         IN p_registerdate  DATE, 
         IN p_activationString VARCHAR(255), 
         IN p_email   VARCHAR(255) 
         ) 
BEGIN 
    INSERT INTO contacts (email) VALUES (p_email); 
    INSERT INTO users (username, password, registerdate, activationString, contact_id) VALUES (p_username, p_password, p_registerdate, p_activationString, LAST_INSERT_ID()); 
END 
$$ 

DELIMITER ; 

SET @p_username = 'user1'; 
SET @p_password = 'pwd'; 
SET @p_registerdate = now(); 
SET @p_activationString = 'str'; 
SET @p_email = '[email protected]'; 
CALL database3.add_new_user(@p_username, @p_password, @p_registerdate, @p_activationString, @p_email); 

저장 프로 시저는 선택 사항입니다 두 삽입 문을 사용할 수 있습니다.

+0

이 저장 프로 시저가 무엇인가? –

+0

고맙습니다. 저에게 새로운 것이 었습니다. :) –

관련 문제