下記のようなコードで二重try-catchで例外を外側のcatchでthrowすることを想定しております。
- サブクラス
pdo_query
において、発生した例外を親クラスのcatchにthrowしたいのですが、throw $e;// 外側のTryブロックに対してスロー こちら
で投げたいのですが、こちらの方法がわからずにご質問させていただきました。
2.この挙動をに確認するために、例えばmain.phpをわざと存在しないカラムから取得するような$sql = "SELECT nill_column FROM test_table";
のように変えた上で、親クラスの$e->getMessage()
をコメントアウトなどしてみたのですが、このコードが存在してもしなくてもブラウザ上はWarning: PDO::query(): SQLSTATE[42S22]: Column not found: 1054 Unknown column 'aa' in 'field list' in /Applications/MAMP/htdocs/textile/dist/51_class.php on line 38
と出力されます。
??$e->getMessage()
がないのにエラーメッセージが出力されてしまっているので、throwではなく何に基づいて出力されているメッセージなのか、ひいては上記の#1についてもどのように挙動を確認すればいいのか混乱しております。
このブラウザに出力されるエラーメッセージは例外の$e->getMessage()
によるものでなければどこから出力されているのでしょうか?また、$e->getMessage()
を正しく出力させるためにはどのようにしたら良いのでしょうか?
php
1//class.php 2<?php 3class pdo_connect 4{ 5 protected $DB_NAME='test'; 6 protected $HOST='localhost:8889'; 7 protected $UTF='utf8'; 8 protected $USER='root'; 9 protected $PASS='root'; 10 11 public function pdo(){ 12 $dsn="mysql:dbname=".$this->DB_NAME.";host=".$this->HOST.";charset=".$this->UTF; 13 $user=$this->USER; 14 $pass=$this->PASS; 15 try{ 16 $pdo=new PDO($dsn,$user,$pass, 17 array( 18 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 19 PDO::ATTR_EMULATE_PREPARES => false, 20 ) 21 ); 22 }catch(Exception $e){ 23 header('Content-Type: text/plain; charset=UTF-8', true, 500); 24 exit($e->getMessage()); 25 } 26 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 27 return $pdo; 28 } 29} 30 31class pdo_query extends pdo_connect 32{ 33 public function select(string $sql){ 34 $pdo_q=$this->pdo(); 35 $pdo_q->beginTransaction(); 36 try{ 37 $stmt=$pdo_q->query($sql);//select * from table where 38 $items=$stmt->fetchAll(PDO::FETCH_ASSOC); 39 $pdo_q->commit(); 40 return $items; 41 }catch (PDOException $e){ 42 $pdo_q->rollBack(); 43 throw $e;// 外側のTryブロックに対してスロー こちら 44 } 45 } 46} 47
main.php
1require_once("class.php"); 2 3$pdo = new pdo_query(); 4$sql = "SELECT * FROM test_table"; 5$result = $pdo->select($sql); 6predump($result);
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/30 03:48
2021/06/30 03:56
2021/06/30 05:15 編集
2021/06/30 05:10
2021/06/30 05:13 編集
2021/06/30 05:16
2021/06/30 05:20
2021/06/30 05:29
2021/06/30 05:29
2021/06/30 05:29
2021/06/30 05:44
2021/06/30 05:51 編集
2021/06/30 06:10
2021/06/30 17:48