0

この2つのクエリを1つにするにはどうすればよいですか?? 2 つのテーブルにデータを挿入します。

 $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%
              )";
4

4 に答える 4

5

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

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

于 2012-04-06T13:07:20.873 に答える
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);
  }

i_id_utこれは、テーブル内のdc_mail_user_dataが FK であり、i_id_pkが自動インクリメント フィールドであることを前提としています。クエリ関数とデータベース接続を含む dbSingle というクラスがあります。通常の mysqli 関数で使用できるほど明確であることを願っています。

于 2012-04-06T14:15:45.393 に答える
1

トリガーまたはストアド プロシージャを使用することはできますが、単純な挿入クエリを使用することはできません。

于 2012-04-06T13:10:13.557 に答える
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);
于 2012-04-10T08:18:50.633 に答える