php-一度に3つのテーブルにデータを挿入します
3つのテーブルのデータ配列の値を 私のコード:
insert
したい。 1つのinsertではすべてが正常に機能しますが、複数のinsertでは機能しません。また、1/3テーブルinsertが失敗した場合に手順をキャンセルする方法はありますか?
if($_POST["action"] == 'Add')
{
$data = array(
':afm' => $_POST["afm"],
':fname' => $visitor->clean_input($_POST["fname"]),
':lname' => $visitor->clean_input($_POST["lname"]),
':city' => $visitor->clean_input($_POST["city"]),
':street' => $visitor->clean_input($_POST["street"]),
':company' => $_POST["company"],
':email' => $_POST["email"],
':phone' => $_POST["phone"],
':make' => $_POST["make"],
':model' => $_POST["model"],
':gen' => $_POST["gen"],
':engine' => $_POST["engine"],
':plate' => $_POST["plate"],
':vin' => $_POST["vin"]
);
$visitor->query = "
INSERT INTO Client
(afm, fname, lname, city, street, company, email)
VALUES (:afm, :fname, :lname, :city, :street, :company, :email)
";
$visitor->query = "
INSERT INTO Phone
(phone_type, phone, clientID)
VALUES ("main phone", :phone, :afm)
";
$visitor->query = "
INSERT INTO Vehicle
(plate, make, model, gen, engine, vin, clientID)
VALUES (:plate, :make, :model, :gen, :engine, :vin, :afm)
";
$visitor->execute($data);
echo '<div class="alert alert-success">success!</div>';
}
答え :
解決策:
最初の挿入
あなたが言ったように、この仕事と私はここであなたが正しいと仮定します。
2番目の挿入
これは私には非常に疑わしいようです。あなたの" main phone"
は構文的に正しくないようです。これがあなたの実際のコードではないかと思います。そこには構文的に正しいコマンドが必要です。
3番目の挿入
これは構文的に正しいようです。
クエリのオーバーライド
2番目と3番目のqueryは$visitor->query
に割り当てられます。あなたがする必要があります
$visitor->query=..。
最初の割り当て時および
$visitor->query。=..。
2番目と3番目。その理由は、最初は query メンバーを初期化できますが、2番目と3番目のコマンドでは、前のコマンドを失うと不幸になるためです。代わりに、2番目と3番目の{ahref ="https://www.tutorialrepublic.com/faq/how-to-append-a-string-in-php.php">追加する必要があります{ -コード-5}。
トランザクション
トランザクションの使用方法は次のとおりです:
$ db-> beginTransaction();
$ stmt1-> exec ute($ query 1);
$ stmt2-> exec ute($ query 2);
$ stmt3-> exec ute($ query 3);
$ db-> commit();
また、コマンドを1つの呼び出しにマージするのではなく、3つの別々の exec
呼び出しに分割することをお勧めします。単一のexecute
内ですべてをexecuteする場合は、 ->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。