質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

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

PDO

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

PHP

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

Q&A

解決済

1回答

1571閲覧

AWS Lightsail上でPDOでMySQLへ接続できない

t_naoya

総合スコア0

MySQL

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

PDO

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

PHP

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

0グッド

0クリップ

投稿2021/08/22 05:25

編集2021/08/22 05:27

前提・実現したいこと

前提

・Amazon LigthsailにてLAMP環境のインスタンスを立てています

実現したいこと

・PHPでPDOを使用してMySQLへ接続したいです

発生している問題・エラーメッセージ

new PDO()しているのですが、その行以降のコードが実行されず、Exceptionも吐かれません。
根本的に足りない部分があるのか、他に確認するべき部分があるか、ご教示いただきたいです。

該当のソースコード

php

1try { 2 $dsn = 'mysql:dbname={DB名};charset=utf8mb4;host=127.0.0.1'; 3 $user = 'root'; 4 $password = '{実際のpassword}'; 5 $pdoErrorMode = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION); 6 7 $pdo = new PDO($dsn, $user, $password, $pdoErrorMode); 8 9 error_log("pdo-end".PHP_EOL, 3, "{ログ出力先のパス}"); 10 // コードを実行してもこのログは出力されない。以降のコードが実行されない。 11 12} catch (PDOException $e) { 13 $errorMessage = $e->getMessage(); 14 error_log(json_encode($errorMessage).PHP_EOL, 3, "{ログ出力先のパス}"); 15 // コードを実行してもExceptionをcacheしない 16} 17

試したこと

1.php.iniファイルでextensionがコメントアウトされていたのを解除。
→変化なし

// php.iniファイル ;extension=pdo_mysql ↓ extension=pdo_mysql

2. phpinfo()でpdoのドライバが入ってるか確認
→問題なさそう
イメージ説明

3. 書き方を変えてみる
→全て変化なし

php

1// hostをlocalhostにしてみる 2$dsn = 'mysql:dbname={DB名};charset=utf8mb4;host=localhost'; 3 4// utf8にしてみる 5$dsn = 'mysql:dbname={DB名};charset=utf8;host=127.0.0.1'; 6 7// charsetなくしてみる 8$dsn = 'mysql:dbname={DB名};host=127.0.0.1';

補足情報(FW/ツールのバージョンなど)

インスタンス:Amazon Lightsail LAMP環境インスタンス
PHPバージョン:7.4.15
MySQLバージョン:8.0.23

インスタンスにsshしてインスタンス上でMySQLへのログインはできます。
その際に使用するユーザー・パスワードは上記で使用しているものと同じです。

ローカル環境ではDockerで別コンテナのDBに接続していますが、
hostとパスワードの部分が違うだけですが、それは問題なく接続できます。

他に必要な情報あればご指摘いただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

解決しました。
実際のコードで、デバッグのためにどこかのタイミングで下記のように「$pdo」を出力しようとしていたのですが、
json_encode()していないのが原因でここでコケていたようです。

php

1 $pdo = new PDO($dsn, $user, $password, $pdoErrorMode); 2 3 error_log("pdo-end".$pdo.PHP_EOL, 3, "{ログ出力先のパス}");

下記のようにjson_encodeすることで以降のコードも動き、DB操作も行えました。

php

1error_log("pdo-end".json_encode($pdo).PHP_EOL, 3, "{ログ出力先のパス}");

お騒がせしました・・・。

投稿2021/08/22 06:07

t_naoya

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問