
こんにちは。
タイトルの通りなのですが
PHPではpostgreを使用してのトランザクション処理で
処理が失敗した時に
ロールバック処理を意識しなくていいのでしょうか?
$conn=pg_connect("host=dbhost user=dbuser password=password dbname=dbname port=5432");
$query="BEGIN;";
$result=pg_exec($conn,$query);
$query="INSRET INTO ....;";
$result=pg_exec($conn,$query);
$query="COMMIT;";
$result=pg_exec($conn,$query);
pg_close($conn);
このコミット時に自動でロールバックされる?
どなたかご存知の方、よろしくお願いします。
No.3ベストアンサー
- 回答日時:
PHPよりも、postgreの板で聞いたほうがよいかもしれません
PHPはROLLBACKに関してはまったく関係ないです
トランザクションとは、小さな処理をひとまとめに考えて、どれか1つの処理でも正常に処理されなかった場合に全ての処理を無かったことにする
という概念です
例えば、現金自動引き落とし機の場合
「現金を支払う」
という処理のほかに
「残高を支払った分だけ引く」
という処理が同時に成功しなくてはなりません
BEGIN でトランザクションを始めて、
COMMITで終わるわけですから、
BEGINの後に、処理をし、その後にデータチェックさせて正常ならばCOMMITさせて、異常ならばROLLBACKさせる
という処理でなくては意味ないです
トランザクション開始(BEGIN)
データの保存(UPDATEなど)
データを読み込んで(SELECT)
データのチェックをして
異常ならばROLLBACK
正常ならばCOMMIT
という流れになります
INSERTの失敗は、データには何も書き込まれませんからROLLBACKする必要の無い質問例文になっていますね
No.2
- 回答日時:
普通は何らかの処理が失敗した場合にはロールバックしますが、
インサートが失敗したときは、変更が無かったということなので、
ロールバックする必要もないということでしょうね。
>コミット時に自動でロールバックされる?
とても勘違いがあると思います。
コミットは、ロールバックしたときの戻れる時点を作ると考えるといいと思います。
トランザクションは
関連する処理をひとまとめに考えて
例えばあるトランザクションとしてA,B,Cという3つの処理が必要な時に
Aという処理は終わったが、何らかの理由でBができなかったり、Cができなかったときに、Aという処理自体も無効(なかったことにする)にするために、ロールバックをします。
Cまでの処理が終わった時点で、次のロールバックがかかったときに、今成功した処理が無効になってしまわないために、成功した一区切りの処理が終わったらコミットします。
もし次ロールバックが起こったらこのコミットした時点に戻ることになります。
No.1
- 回答日時:
例題に多少の疑問はあるが、
各クエリの成否によりcommitするか決めるのが普通
> このコミット時に自動でロールバックされる?
意味がわかりにくいが、失敗時にロールバッグされるかという意味?
まずは、最後のcommitを省くとどうなるか試してみる
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php エラー 2 2022/10/23 16:43
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP PHPでMysqlにデータがあるかどうか判別したい 1 2023/03/02 11:48
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPのif文でその処理を途中で抜...
-
PHP内、ボタン押下と同時にリロ...
-
phpの処理中に画面表示ををする...
-
VBAからPHPを実行(キック)したい
-
PHPが処理を途中でやめる。原因...
-
PHPで偶数と奇数を判断するには
-
PHPでhtmlファイル内のテキスト...
-
Perlで検索エンジン作成は可能!?
-
makefile でファイルをコピーす...
-
フォントの色を変えるには?
-
PHPを使った会員登録サイト
-
グーグル検索について
-
ツリーメニューを縮小させたい
-
PHPの拡張子を見せない方法
-
PHPでメールの送信(Gmail使用)
-
powerbuilderのメール機能について
-
PHPでサーバーにインストールさ...
-
mysqlへのデータ挿入
-
これは例外処理でしょうか?
-
Re: Cookieを使ってオブジェク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPのif文でその処理を途中で抜...
-
PHPが処理を途中でやめる。原因...
-
phpの処理中に画面表示ををする...
-
Smartyにて、文字検索
-
PHP内、ボタン押下と同時にリロ...
-
インスタンス化に伴うメモリ消...
-
フォームが送信されたかの確認...
-
APIで出てきたXMLをPHPで表示さ...
-
大量チェックボックスの実装方...
-
デバッグの仕方・・・
-
PHPの変わった閉じタグの必要性...
-
入れ子になっているHTMLタグも...
-
デフォルト、フロントコントロ...
-
タイムアウト時に次の処理へ移...
-
PHPで偶数と奇数を判断するには
-
CakePHPでのemptyの 0 判定に関...
-
Cronで同じ処理を複数同時に実...
-
チェックボックスをビット演算...
-
PHPの書き方について
-
条件分岐 if(elseif) switchの...
おすすめ情報