v5:userguide:transactions
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| userguide:transactions [2015/12/29 20:33] – [Nesting Transactions] mnewnham | v5:userguide:transactions [2020/08/26 10:09] (current) – [Usage] Add braces as suggested by @peterdd in #629 dregad | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ======Transaction Handling In ADOdb ====== | ======Transaction Handling In ADOdb ====== | ||
| ===== Overview ===== | ===== Overview ===== | ||
| - | There are 2 ways of handling | + | There are 2 ways of overriding the default database transaction |
| * Granular transactions allow full control of individual commits | * Granular transactions allow full control of individual commits | ||
| * Smart transactions are easier to control | * Smart transactions are easier to control | ||
| + | |||
| + | ------------------------------------------- | ||
| + | |||
| + | ===== Default Behaviour ===== | ||
| + | <WRAP right info 300px> | ||
| + | MySQL myIsam tables are always granular, and ignore any transaction control methods coded. You cannot rollback or fail an update into that table type. Use InnoDB table types instead. | ||
| + | |||
| + | This also applies to any sequences that might have been updated in the transaction, | ||
| + | </ | ||
| + | If ADOdb transaction handling is not used, then the transaction handling method is controlled by whatever is set by the database. Possible methods are: | ||
| + | |||
| + | * Automatically creating granular updates | ||
| + | * Automatically rolling back the transactions at the end of procedures | ||
| + | * Failing unless a transaction handling method is assigned on connection | ||
| ---------------------------------------------- | ---------------------------------------------- | ||
| + | |||
| ===== Granular Transactions ===== | ===== Granular Transactions ===== | ||
| <WRAP right box> | <WRAP right box> | ||
| == Available Methods == | == Available Methods == | ||
| - | [[reference: | + | [[v5:reference:connection: |
| - | [[reference: | + | [[v5:reference:connection: |
| - | [[reference: | + | [[v5:reference:connection: |
| + | == See Also == | ||
| + | [[v5: | ||
| + | [[v5: | ||
| </ | </ | ||
| When using granular transactions, | When using granular transactions, | ||
| Line 28: | Line 46: | ||
| $ok = $conn-> | $ok = $conn-> | ||
| - | if ($ok) | + | if ($ok) { |
| /* | /* | ||
| * The previous execution succeeded, do some more | * The previous execution succeeded, do some more | ||
| | | ||
| $ok = $conn-> | $ok = $conn-> | ||
| - | else | + | } else { |
| /* | /* | ||
| * Branch, do some other work, then return | * Branch, do some other work, then return | ||
| */ | */ | ||
| - | if (!$ok) | + | } |
| + | |||
| + | if (!$ok) | ||
| /* | /* | ||
| - | * Test the last insertion, if not successful roll back the entire transaction scope | + | * Test the last insertion, if not successful roll |
| + | * back the entire transaction scope | ||
| */ | */ | ||
| $conn-> | $conn-> | ||
| - | else | + | } else { |
| /* | /* | ||
| * Go ahead and commit | * Go ahead and commit | ||
| */ | */ | ||
| $conn-> | $conn-> | ||
| + | } | ||
| </ | </ | ||
| - | ==== Stacking Transactions ==== | ||
| - | Granular transactions cannot be stacked, i.e. each '' | ||
| ----------------------------- | ----------------------------- | ||
| ===== Smart Transactions ===== | ===== Smart Transactions ===== | ||
| <WRAP right box> | <WRAP right box> | ||
| == Available Methods == | == Available Methods == | ||
| - | [[reference: | + | [[v5:reference:connection: |
| - | [[reference: | + | [[v5:reference:connection: |
| - | [[reference: | + | [[v5:reference:connection: |
| - | [[reference: | + | [[v5:reference:connection: |
| + | == See Also == | ||
| + | [[v5: | ||
| + | [[v5: | ||
| </ | </ | ||
| - | Smart Transactions are much easier to use in large procedures because you do not have to track the error status. You start a smart transaction by calling | + | Smart Transactions are much easier to use in large procedures because you do not have to track the error status. You start a smart transaction by calling |
| <code php> | <code php> | ||
| Line 70: | Line 93: | ||
| * Execute some SQL | * Execute some SQL | ||
| */ | */ | ||
| - | $conn->Execute($sql); | + | $conn->execute($sql); |
| /* | /* | ||
| * Execute some more SQL | * Execute some more SQL | ||
| */ | */ | ||
| - | $conn->Execute($Sql2); | + | $conn->execute($sql2); |
| /* | /* | ||
| - | * Call completetrans. If any of the executions in the above code have failed, the transactions will roll back automatically | + | * Call completetrans. If any of the executions in the above |
| + | * code have failed, the transactions will roll back automatically | ||
| */ | */ | ||
| $conn-> | $conn-> | ||
| </ | </ | ||
| - | CompleteTrans() detects when an SQL error occurs, and will Rollback/Commit as appropriate. | + | [[v5: |
| - | You can force a rollback even if no error occured, using failTrans(). Note that the rollback is done in CompleteTrans(). | + | You can force a rollback even if no transactional |
| <code php> | <code php> | ||
| Line 92: | Line 116: | ||
| $conn-> | $conn-> | ||
| - | if (!CheckRecords()) | + | if (!checkRecords()) |
| $conn-> | $conn-> | ||
| - | $conn->Execute($Sql2); | + | /* |
| + | * Even though failTrans was issued before this statement, | ||
| + | * it will also be rolled back | ||
| + | */ | ||
| + | $conn->execute($sql2); | ||
| - | $conn->CompleteTrans(); | + | $conn->completeTrans(); |
| </ | </ | ||
| - | You can also check if a transaction has failed, using HasFailedTrans(), which returns true if FailTrans() was called, | + | You can also check if a transaction has failed, using [[v5: |
| + | * if [[v5: | ||
| + | * There was an error in the SQL execution. | ||
| + | |||
| + | Make sure you call '' | ||
| Line 119: | Line 151: | ||
| */ | */ | ||
| $conn-> | $conn-> | ||
| - | if (!CheckRecords()) | + | if (!checkRecords()) |
| /* | /* | ||
| * This is applied to the outer block | * This is applied to the outer block | ||
| Line 136: | Line 168: | ||
| $conn-> | $conn-> | ||
| </ | </ | ||
| - | + | ==== Savepoints ==== | |
| + | Savepoints are currently not supported. | ||
v5/userguide/transactions.1451417591.txt.gz · Last modified: (external edit)
