2011-12-08 2 views
1

PDOトランザクションを使用する場合、テーブルをロックする必要がありますか?PDO取引ですか?

ユーザaが50通貨を持ち、ユーザbに50を移転する場合、PDO取引はすべてエラーなしで実行されることを確認しますか?

私は、トランザクションが実行されている間、私は、ユーザーのお金の価値は、クエリが実行すべきではありません意味変化していないことを確認するにはどうすればよい

if ($user['money'] > 500) { 
    $dbc ->beginTransaction(); 
    ......... 
    $dbc ->commit(); 
} 

、のようなif文を持っていると言う場合も

?? ありがとう

答えて

1

トランザクション処理はSQLサーバーによって保証されています。 beginTransaction()が成功した場合、commit()は成功し、SQLサーバーとテーブルはトランザクションをサポートしています。

1

PDOは抽象レイヤーなので、データベースによって異なります。 MySQLはトランザクションをサポートしますが、InnoDBテーブルのみをサポートします。それ以外の場合は、テーブルロックのみ(同じではありません)。 SQLiteは常にトランザクションをサポートします。別のデータベースは決してないかもしれない。

トランザクションでは、依然としてロジックを作成して検証するために開発者が必要です。データベースは、正しい(正しいだけでなく)何が間違っている(間違っている)か分からない。あなたはそうするので、BEGINとCOMMIT/ROLLBACKを必要に応じて呼び出すスクリプトを作成しなければなりません。

また、注目すべき点は、トランザクションがデータベースエラーの後に自動的にROLLBACKされないことです。 (つまり、データベースやDBALの中にはいくつかのことがあるかもしれませんが、標準ではないので、それを期待してはいけません)。つまり、すべてのクエリの結果/レスポンス/フィードバックをチェックし、適切に行動する必要があります。

関連する問題