1. 接続確立
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
?>
2. 接続エラー処理
try {
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
foreach($dbh->query(' SELECT * from FOO') as $row) {
print_r($row) }
$dbh = null;
} catch (PDOException $e) {
print "Error!: " . "
";
die();
}
?>
接続を閉じます
$dbh = new PDO('mysql:host = localhost;dbname=test', $user, $pass);
// ここで接続を使用します
// 操作が完了したので、ここで接続を閉じます $dbh = null ?>
Transaction
;
すべてのデータベースがトランザクションをサポートしているわけではないため、接続が最初に開かれるときに PDO はいわゆる「自動コミット」モードで実行する必要があります。オートコミット モードは、データベースがトランザクションをサポートしている場合は各クエリ実行に独自の暗黙的なトランザクションがあり、データベースがトランザクションをサポートしていない場合はトランザクションが存在しないことを意味します。トランザクションが必要な場合は、PDO::beginTransaction() メソッドを使用して開始する必要があります。基礎となるドライバーがトランザクションをサポートしていない場合、PDOException がスローされます (これは、エラー処理設定に関係なく、重大なエラー状態です)。トランザクションが開始されると、トランザクション内のコードが正常に実行されたかどうかに応じて、PDO::commit() または PDO::rollBack() を使用してトランザクションを完了できます。
スクリプトが終了するとき、または接続が閉じられようとするときに、未完了のトランザクションがある場合、PDO は自動的にトランザクションをロールバックします。この安全対策は、スクリプトが予期せず終了した場合の不整合を回避するのに役立ちます。トランザクションが明示的にコミットされていない場合は、何か問題が発生したと想定されるため、データを安全に保つためにロールバックが実行されます。
次の例では、新しい従業員用に一連のエントリが作成され、ID 23 が割り当てられていると仮定します。個人の基本データを登録することに加えて、給与も記録する必要があります。両方の更新を個別に行うのは簡単ですが、それらを PDO::beginTransaction() 呼び出しと PDO::commit() 呼び出しで囲むことで、完了するまで他の人が変更を確認できないようにすることができます。エラーが発生した場合、catch ブロックはトランザクションの開始以降に発生したすべての変更をロールバックし、エラー メッセージを出力します。
try {
$dbh = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2',
array(PDO::ATTR_PERSISTENT => true));
echo " Connectedn";
} catch (Exception $e) {
die("接続できません: " . $e->getMessage());
}
try {
$dbh->setAttribute(PDO:: ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->beginTransaction(); $dbh->exec("スタッフ (id, first, last) 値に挿入 (23, 'Joe', 'Bloggs') )" ); $dbh->exec("給与変更 (ID、金額、変更日) 値に挿入 (23, 50000, NOW())"); $dbh->commit();
} catch (Exception $e ) { $dbh->rollBack(); echo "Failed: " . $e->getMessage(); } ?>
上記は Note 004 PHP POD Study Note 03 の内容です。その他の関連コンテンツ PHP 中国語 Web サイト (www.php.cn) にも注目してください。