sql >> データベース >  >> RDS >> Mysql

複数のプリペアドステートメントの1つが失敗した場合は、停止して元に戻します

    1. mysqli接続の前にこの行を追加してmysqliを例外モードにします

      mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
      
    2. クエリをトランザクションでラップします
    3. トランザクションをtry..catchステートメントでラップし、内部にロールバック呼び出しを追加します。

    したがって、コードは次のようになります

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $db = new mysqli(...);
    ...
    try {
        $db->autocommit(FALSE);
    
        $db->address_table_insert_statement($firstName, $lastName, $companyName, $streetAddress, $streetAddress2, $streetAddress3, $city, $state, $zip, $country, $phone, $fax, $email, $date, $date);
        $addressId = mysqli_insert_id($db->connection);
        $db->address_table_insert_statement($firstName, $lastName, $companyName, $billingStreetAddress, $billingStreetAddress2, $billingStreetAddress3, $billingCity, $billingState, $billingZipCode, $billingCountry, $billingPhone, $billingFax, $billingEmail, $date, $date);
        $billingAdressId = mysqli_insert_id($db->connection);
        $db->account_table_insert_statement($active, $addressId, $billingAddressId, $dateCreated, $dateModified);
    
        $db->commit();
    } catch (\Exception $e) {
        $db->rollback();
        throw $e;
    }
    



    1. SQL Serverでマルチステートメントテーブル値関数(MSTVF)を作成する

    2. WHERE IN(IDの配列)

    3. psql:致命的:データベース<ユーザー>は存在しません

    4. SQL:連鎖結合の効率