• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:insert1つの処理でもトランザクションは必要?)

1つの処理でもトランザクションは必要?

このQ&Aのポイント
  • 1つの処理でもトランザクションは必要な場合があります。
  • トランザクションは、データベースの完全性を保つために使用されます。
  • ただし、トランザクションの使用は状況によります。

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.2

いいえ、不要ですです。トランザクションは使えば使うほどパフォーマンスが悪くなるので、使用は最低限に抑えましょう。 (蛇足) >> if (!$ret) { >> throw new Exception('INSERT 失敗'); >> } executeの返り値をチェックして自分で例外を投げるのは二度手間です。PDO::ERRMODE_EXCEPTIONを有効にしましょう。 【推奨される書き方(もしトランザクションを使うのであれば)】 try {    $dsn = 'mysql:dbname=〇〇〇;host=〇〇〇;charset=utf8';  $user = 'user';  $pwd = 'pwd';  $options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);    $pdo = new PDO($dsn, $user, $pwd, $options);  $pdo->beginTransaction();  try {      $sql = 'INSERT into table (test1, test2, test3) VALUES (:a, :b, :c)';   $st= $pdo->prepare($sql);   $st->execute(compact('a', 'b', 'c'));   $pdo->commit();     } catch (PDOException $e) {      $pdo->rollBack();   throw $e;     } } catch (PDOException $e) {    echo 'Error: ' . $e->getMessage();   }

infinity38
質問者

お礼

ご回答ありがとうございます。 さらに蛇足、ありがとうございます。 PDO::ERRMODE_EXCEPTIONは有効にしておきたいと思います。

その他の回答 (1)

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

commitはしておくべきです。 システムにもよりますが、MYSQL自体が異常終了した場合、 ROLLBACKされてこの処理が無効になるおそれがあるからです。 大型汎用機でDB2で組んでいた時、DB2が異常終了してデータが消えた経験があります。

infinity38
質問者

お礼

必要ということですね。 ご回答ありがとうございます。

関連するQ&A

専門家に質問してみよう