0

一度に 2 つのテーブルに挿入する必要があります。1 つのテーブルが client_enquiry で、もう 1 つのテーブルが client_materials であるとします。ここまでは問題ありません。INSERT コマンドは両方のテーブルで機能しています。そして、2 番目のテーブル (client_materials) に挿入しているときに何か問題が発生した場合はどうなりますか? テーブル client_materials で INSERT コマンドが失敗した場合、どのように「ロールバック」できますか? 基本的に私はこれを持っています:

 $sql_table1 = "INSERT INTO client_enquiry (reference, date) VALUES ('REF', '2013-05-12')";
 $q = $conn->prepare($sql_table1);
 $q ->execute();

 $Last_ID = $conn->lastInsertId('id_enquiry');

 $sql_table2 = "INSERT INTO client_materials (id_client_enquiry,description, date) 
    VALUES (".$Last_ID."'Description', '2013-05-12')";
 $q = $conn->prepare($sql_table2);
 $q -> execute();
4

1 に答える 1

2

あなたが言及しロールバックを実行してください。

$conn->beginTransaction();
try
{
    $sql = "INSERT INTO client_enquiry (reference, date) VALUES (?,?)";
    $q = $conn->prepare($sql);
    $q ->execute(array('REF', '2013-05-12'));

    $Last_ID = $conn->lastInsertId();

    $sql_table2 = "INSERT INTO client_materials (id_client_enquiry,description, date) 
                   VALUES (?,?,?)";
    $q = $conn->prepare($sql);
    $q -> execute(array($Last_ID, 'Description', '2013-05-12'));

    $conn->commit();

}
catch (PDOException $e)
{
    $conn->rollback();
    throw $e;
}

エンジンがトランザクションをサポートし、 PDO が例外スロー モードに設定されていることを確認する必要があります。

于 2013-05-12T11:59:52.197 に答える