0

Вопрос по sql, mysql – SQL INSERT INTO несколько таблиц

Как вы можете сделать один запрос из этих двух? Я вставлю данные в две таблицы.

 $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%
              )";
  • Почему бы не использовать триггер?

    от user319198
  • 0

    Code:

    $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);
    

  • 2

    Какова цель этого? Вы пытаетесь вставить данные в две разные таблицы и

    з одной HTML-формы? Я не знаю о хранимых процедурах, но использую транзакцию в подобном случае, как это:

    $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 это ФК иi_id_pk поле автоинкремента. У меня есть класс с именем dbSingle, который содержит функции запроса и подключения к базе данных. Надеюсь, это достаточно ясно для использования с обычными функциями mysqli.

  • 5

    Вы не можете вставить в 2 таблицы с одним запросом.

    Вам нужно будет использовать хранимую процедуру, где вы можете поместить эти вставки.

  • 1

    Вы можете сделать это с помощью триггера или хранимых процедур

    но не с помощью простого запроса вставки.