下記のソースは、データベースへ接続するときに例外が発生した場合、例外処理が発生するものです。
php
1try { 2 3//接続 4$dsn = "dbname=aaaa;host=localhost"; 5$user = "root"; 6$password = ""; 7$dbh = new PDO($dsn, $user, $password); 8$dbh->query("set names utf8"); 9 10print "接続しました。"; 11//接続解除 12$dbh = null; 13 14} catch(exception $e) { 15 print "ただいま障害が発生しており大変ご迷惑おかけしております。".mb_convert_encoding($e->getMessage(),'UTF-8','JIS,ASCII,CP51932,SJIS-win'); 16 exit(); 17} 18
たまたまネットサーフィンしているときに、データベースに接続する際のことを指南しているサイトを見つけ閲覧していたところ下記のソースが記述してありました。
php
1try { 2 $pdo = new PDO('mysql:dbname=phpdb;host=127.0.0.1', 'root', '1234', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 3 $pdo->query('SET NAMES utf8'); 4 5 $stmt = $pdo->query('SELECT * FROM address WHERE no >= 10 AND no <= 20'); 6 while ($data = $stmt->fetch(PDO::FETCH_ASSOC)) { 7 echo '<p>' . $data['no'] . ':' . $data['name'] . "</p>\n"; 8 } 9} catch (PDOException $e) { 10 exit($e->getMessage()); 11} 12 13$pdo = null;
http://www.php-labo.net/tutorial/class/pdo.html
PDOの第4引数に何かを指定できること自体、ネットサーフィンをして初めて知りました。第4引数にDB接続中に発生したエラーをどのように通知するかを指定できるATTR_ERRMODEとERRMODE_EXCEPTIONを指定することで
"接続時"以外のエラーが発生したときも一律に例外を投げることが出来るのでソースの記述が短くなります。
ここで疑問ですが、先述の技巧と接続時のエラーのみ例外を投げ、それ以外は、条件分岐などで個別にエラーの対処をするのは、どちらが適当であると思いますか。
ソースが短くなる以外に、何か利点はありますか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。