質問編集履歴

1 閉じタグ追加, phpバージョン記載

NOBUTUNA

NOBUTUNA score 11

2019/03/05 09:51  投稿

PDOでのMysql接続関連
### 前提・実現したいこと
以下のclass Sql 別々のファイルで2箇所でインスタンス化しfunction ProductDataSelect と WpIdCheck をそれぞれ使用しているのですが、WpIdCheckの方が途中で処理が止まってしまいます。
調べたところWpIdCheck の方は $dbh が null となっているため、正しくDBとアクセスできていないようです。
どのようにしたらそれぞれの WpIdCheck でもMysqlに接続させることができますでしょうか。
```PHP
class Sql
{
   private function DBconnect() {
       // DB 接続処理
       try {
           $dsn = "mysql:dbname=".DBNAME.";host=".HOST.";";
           $dbh = new PDO($dsn, USERNAME, PASSWORD);
           $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
       } catch (Exception $e) {
           echo "DB アクセス失敗";
           echo $e ;
       }
       return $dbh;
   }
   public function ProductDataSelect($shop_name) {
       $dbh   = $this->DBconnect();
       $sql   = "SELECT * FROM research_data WHERE shop = :shop";
       $stmt  = $dbh->prepare($sql);
       $params = [':shop' => $shop_name];
       $stmt->execute($params);
       $research_url = $stmt->fetchAll(PDO::FETCH_ASSOC);
       return $research_url;
    }
    public function WpIdCheck () {
       try {
           $dbh = $this->DBconnect();
           $sql = "SELECT * FROM research_data WHERE shop = :shop";
error_log(var_export('ここのエラーログは正しく表示されている', true));
       // ここで処理が止まっている、エラーろぐも発生していない.
           $stmt = $dbh->prepare($sql);
error_log(var_export('ここの文字列はエラーログに出力されない。。。', true));
           $param = [':shop' => 'xxxxxxxx'];
           $stmt->execute($param);
           $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
       } catch (PDOException $e) {
           print $e->getMessage();
           print "WpIdCheck エラーテスト用";
           die();
       }
   }  
}
```
他ファイルでの呼び出し例
A file
```PHP
$sql_obj     = new Sql();
$test        = $sql_obj->WpIdCheck();
```
B file
```PHP
$db_obj = new Sql();
$url_list = $db_obj->ProductDataSelect($shop_name);
```
### 発生している問題・エラーメッセージ
なし
エラーは発生しておらず catch の方にも処理は流れてきませんでした。
### 試したこと
function DBconnect を当初 __construct で処理していましたが、WpIdCheck でアクセスできなくてから共通ではダメなのかと考え各function で一番初めに以下処理を追加しました。
結局解決できませんでしたが。。。
```PHP
$dbh   = $this->DBconnect();
```
非常に単純な内容の可能性もあり申し訳ありませんが、各所にエラーログを仕込んでも解決に至りませんでした。
### 補足情報(FW/ツールのバージョンなど)
ローカル MAMP環境
php7
php7.1.23
MySQL 5.6.38
  • PHP

    38490 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MySQL

    11964 questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • PDO

    604 questions

    PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

  • MAMP

    613 questions

    Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る