前提・実現したいこと
以下のclass Sql 別々のファイルで2箇所でインスタンス化しfunction ProductDataSelect と WpIdCheck をそれぞれ使用しているのですが、WpIdCheckの方が途中で処理が止まってしまいます。
調べたところWpIdCheck の方は $dbh が null となっているため、正しくDBとアクセスできていないようです。
どのようにしたらそれぞれの WpIdCheck でもMysqlに接続させることができますでしょうか。
PHP
1class Sql 2{ 3 private function DBconnect() { 4 // DB 接続処理 5 try { 6 $dsn = "mysql:dbname=".DBNAME.";host=".HOST.";"; 7 $dbh = new PDO($dsn, USERNAME, PASSWORD); 8 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 9 10 } catch (Exception $e) { 11 echo "DB アクセス失敗"; 12 echo $e ; 13 } 14 return $dbh; 15 } 16 17 public function ProductDataSelect($shop_name) { 18 $dbh = $this->DBconnect(); 19 $sql = "SELECT * FROM research_data WHERE shop = :shop"; 20 $stmt = $dbh->prepare($sql); 21 $params = [':shop' => $shop_name]; 22 23 $stmt->execute($params); 24 $research_url = $stmt->fetchAll(PDO::FETCH_ASSOC); 25 26 return $research_url; 27 } 28 29 public function WpIdCheck () { 30 try { 31 $dbh = $this->DBconnect(); 32 $sql = "SELECT * FROM research_data WHERE shop = :shop"; 33error_log(var_export('ここのエラーログは正しく表示されている', true)); 34 // ここで処理が止まっている、エラーろぐも発生していない. 35 $stmt = $dbh->prepare($sql); 36error_log(var_export('ここの文字列はエラーログに出力されない。。。', true)); 37 38 $param = [':shop' => 'xxxxxxxx']; 39 $stmt->execute($param); 40 $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 41 } catch (PDOException $e) { 42 print $e->getMessage(); 43 print "WpIdCheck エラーテスト用"; 44 die(); 45 } 46 } 47}
他ファイルでの呼び出し例
A file
PHP
1$sql_obj = new Sql(); 2$test = $sql_obj->WpIdCheck();
B file
PHP
1$db_obj = new Sql(); 2$url_list = $db_obj->ProductDataSelect($shop_name);
発生している問題・エラーメッセージ
なし
エラーは発生しておらず catch の方にも処理は流れてきませんでした。
試したこと
function DBconnect を当初 __construct で処理していましたが、WpIdCheck でアクセスできなくてから共通ではダメなのかと考え各function で一番初めに以下処理を追加しました。
結局解決できませんでしたが。。。
PHP
1$dbh = $this->DBconnect();
非常に単純な内容の可能性もあり申し訳ありませんが、各所にエラーログを仕込んでも解決に至りませんでした。
補足情報(FW/ツールのバージョンなど)
ローカル MAMP環境
php7.1.23
MySQL 5.6.38
回答3件
あなたの回答
tips
プレビュー