2012-04-06 61 views
0

この2つのクエリをどのように作成できますか?私は2つのテーブルにデータを挿入します。複数のテーブルにSQL INSERTを挿入

$query = " 
       INSERT INTO dc_mail_users (
        i_id_pk, c_user, c_passwd_md5, i_user_active_id_fk, i_user_type_id_fk 
      ) VALUES (
        %1%, %2%, %3%, %4%, %5% 
      )"; 

$query2 = " 
       INSERT INTO dc_mail_user_data (
        i_id_ut, c_user_sex, c_user_name, c_user_surname, c_user_url 
      ) VALUES (
        %1%, %2%, %3%, %4%, %5% 
      )"; 
+0

なぜトリガーを使わないのでしょうか? –

答えて

2

この目的は何ですか? 1つのHTMLフォームから2つの異なるテーブルにデータを挿入しようとしていますか?私は、ストアドプロシージャのことは知らないが、私はこのような似たようなケースでは、トランザクションを使用します。

$d = dbSingle::dbLink(); 
//set autocommit to false 
mysqli_autocommit($d->getDbc(), FALSE); 

$query = " INSERT INTO dc_mail_users (
       i_id_pk, c_user, c_passwd_md5, i_user_active_id_fk, i_user_type_id_fk 
     ) VALUES (
       %1%, %2%, %3%, %4%, %5% 
     )"; 

$r = $d->sqlQ($query); 

//get the last inserted id for the second query 
$last_insert_id = $d->getInsertId();      

$query2 = " 
      INSERT INTO dc_mail_user_data (
       i_id_ut, c_user_sex, c_user_name, c_user_surname, c_user_url 
     ) VALUES (
       %{$last_insert_id}%, %2%, %3%, %4%, %5% //not sure about the syntax, sorry 
     )"; 


$r2 = $d->sqlQ($query2); 

//rollback if either one of the queries failed 
if (!$r || (isset($r2) && !$r2)) { 
    mysqli_rollback($d->getDbc()); 
} 
    else { 
    //commit if everything worked 
    mysqli_commit($d->getDbc()); 

    //autocommit on 
    mysqli_autocommit($d->getDbc(), TRUE); 
    } 

これは、テーブルdc_mail_user_datai_id_utがFKで、i_id_pkが自動インクリメントフィールドで想定しています。私はクエリ関数とデータベース接続を含むdbSingleと呼ばれるクラスがあります。通常のmysqli関数で使用するのに十分なだけのことを望みます。

5

1つのクエリで2つのテーブルに挿入することはできません。

この挿入を挿入できるストアドプロシージャを使用する必要があります。

1

トリガーまたはストアドプロシージャではできますが、単純な挿入クエリでは実行できません。

0
$query = " 
       INSERT INTO dc_mail_users 
        (i_id_pk, c_user, c_passwd_md5, i_user_active_id_fk, i_user_type_id_fk) 
       VALUES (%1%, %2%, %3%, %4%, %5%) 
      "; 

$query2 = " 
      INSERT INTO dc_mail_user_data 
        (c_user_sex, c_user_name, c_user_surname, c_user_url) 
      VALUES (%1%, %2%, %3%, %4%)"; 

// start query 1   
$dbh = new DB_Mysql_Extended; 
$dbh->prepare($query)->execute($this->i_id_pk, $this->c_user, $this->c_passwd_md5, $this->i_user_active_id_fk, $this->i_user_type_id_fk); 

// start query 2 
$dbh2 = new DB_Mysql_Extended; 
$dbh2->prepare($query2)->execute($this->c_user_sex, $this->c_user_name, $this->c_user_surname, $this->c_user_url); 
関連する問題