これの目的は何ですか?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 関数で使用できるほど明確であることを願っています。