サポート » 使い方全般 » トランザクション処理について

  • 解決済 hokahokanikuman

    (@hokahokanikuman)


    テーブルの更新でトランザクションを使いたいのですが、どうして以下の書き方なのでしょうか?

    $wpdb->query('SET autocommit=0');
    $lock = 'LOCK TABLES wp_mytable WRITE';
    if ( $wpdb->query($lock) === false ) {	
        // エラー						
    }else{
        // エラーなし
    }
    

    以下のように一回にまとめちゃダメなのはなぜですか?

    $lock = 'SET autocommit=0 LOCK TABLES wp_mytable WRITE';
    if ( $wpdb->query($lock) === false ) {	
        // エラー						
    }else{
        // エラーなし
    }
    
2件の返信を表示中 - 1 - 2件目 (全2件中)
  • こんにちは

    SET autocommit=0 LOCK TABLES wp_mytable WRITE
    は MySQL の構文としてエラーです。
    SET 文と LOCK TABLES 文をつなげてしまっています。
    SET autocommit=0;LOCK TABLES wp_mytable WRITE
    なら MySQL 的にはエラーになりませんが、$wpdb->queryで実行して想定通りに動作するかはちょっと分かりません。

    また、分けた書き方だとロックに成功したのか失敗したのか取得できるような書き方ですが、いっしょに実行すると オートコミットを無効にした処理が失敗したのか、ロックが失敗したのかを判断することができません。
    どちらが失敗したかを判定する必要があるのかたは処理によるので分かりませんが。

    トピック投稿者 hokahokanikuman

    (@hokahokanikuman)

    なるほど。思慮深く丁寧なご回答感謝です。よいお年を^^

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「トランザクション処理について」には新たに返信することはできません。