PHP PDOのトランザクション
例えば、複数件のレコードをDBに書き込んでいる途中で「トラブル発生したときに元の状態に戻す」ってのがトランザクションってヤツの考え方らしい。
で、PHPのPDO()ってヤツにもこのトランザクションって機能がいるみたい。
まだ試していないので、忘れる前にコピっておく。
try {
$dbh = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2',
array(PDO::ATTR_PERSISTENT => true));
echo "接続しました\n";
} catch (Exception $e) {
die("接続できません: " . $e->getMessage());
}
try {
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->beginTransaction();
$dbh->exec("insert into staff (id, first, last) values (23, 'Joe', 'Bloggs')");
$dbh->exec("insert into salarychange (id, amount, changedate)
values (23, 50000, NOW())");
$dbh->commit();
} catch (Exception $e) {
$dbh->rollBack();
echo "失敗しました。" . $e->getMessage();
}
?>
「beginTransaction()」と「commit()」の間に書き込み系の何かをしておけばよさげ。
マニュアルをみると勝手にロールバックしてくれるとか書いてるけど、ソースでは「rollBack()」と記載されている。これは、どういう意味なんだろう?
勝手にロールバックするけど、あえて明示してるだけなのかな?
▼PDO()じゃないヤツ
PHP Mysqlとトランザクション