下記の通り、PDOをクラス化して利用したいと考えております。
ここで、クラス側でtry-catchをしており、MYSQLでシンタックスエラーが発生している場合には、return "error"; //here
によって、とりあえず内容に関わらずerrorの文字列を取得する様な仕組みを検討しております。
ここで
$sql ="SELECT * FROM sample_table";
でわざとシンタックスエラーを起こして
$sql ="SELECTT * FROM sample_table";
の様にして$resultにerrorを返すことを期待したのですが、Internal Server Error 500がブラウザヘッダーに返ってくる結果となり、クラスを通して例外が正しくthrowされていないことがわかりました。
例えばこの様な記事も拝見し、PDOをクラス化して利用する場合でも、クラスの中でtry-catchして例外処理を取得すること自体は問題がないと考えたのですが、期待する結果が得られない原因と解決方法についてアドバイスをいただけますでしょうか?
よろしくお願い申し上げます。
php
1require_once("51_class.php"); 2 3$use_pdo_query = new pdo_query("sample_db"); 4$sql ="SELECT * FROM sample_table"; 5$result = $use_pdo_query -> select($sql_get_latest_content); 6var_dump($result);//正しく出力されることを確認
php
1//class.php 2class pdo_connect 3{ 4 protected $DB_NAME; 5 protected $HOST='localhost:8889'; 6 protected $UTF='utf8'; 7 protected $USER='root'; 8 protected $PASS='root'; 9 10 function __construct($x) { 11 $this->DB_NAME = $x; 12 } 13 14 public function pdo(){ 15 $dsn="mysql:dbname=".$this->DB_NAME.";host=".$this->HOST.";charset=".$this->UTF; 16 $user=$this->USER; 17 $pass=$this->PASS; 18 try{ 19 $pdo=new PDO($dsn,$user,$pass, 20 array( 21 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 22 PDO::ATTR_EMULATE_PREPARES => false, 23 ) 24 ); 25 }catch(PDOException $e){ 26 header('Content-Type: text/plain; charset=UTF-8', true, 500); 27 exit($e->getMessage()); 28 } 29 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 30 return $pdo; 31 } 32} 33 34class pdo_query extends pdo_connect 35{ 36 public function select(string $sql){ 37 $pdo_q=$this->pdo(); 38 $pdo_q->beginTransaction(); 39 try{ 40 $stmt=$pdo_q->query($sql); 41 $items=$stmt->fetchAll(PDO::FETCH_ASSOC); 42 $pdo_q->commit(); 43 return $items; 44 }catch (PDOException $e){ 45 // return $e->getMessage(); 46 return "error"; //here 47 } 48 } 49}
回答1件
あなたの回答
tips
プレビュー