PDOException(code: 0)
PHPでサーバーを立て、接続したところInternalServerが発生。
ログを確認するとPDOException(code: 0)とのエラーログ。
どうやら、MySQLとの接続がうまくいってないらしい。
環境
- Ubuntu18.04
- php 8.0.23
試したこと
設定の確認
.envファイルの確認。DB設定が間違っていないか確認。
Install package
sudo apt-get install php-mysql
PHP driverの確認
以下のコードを実行して単純にドライバがないのかの切り分け。
<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=sample;charset=utf8mb4','admin','P@ssw0rd');
} catch (PDOException $e) {
exit($e->getMessage().PHP_EOL);
}
echo('ok'.PHP_EOL);
?>
php sample.php
以下のメッセージが出力。
could not find driver
解消
以下の記事を参考に、php-mysqlnd のインストール。
sudo apt-get install php-mysqlnd
すると、以下のような出力が。
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package php-ctype is a virtual package provided by:
php8.0-mysql 1:8.0.23-1+ubuntu18.04.1+deb.sury.org+1
php7.4-mysql 7.4.2-6+ubuntu18.04.1+deb.sury.org+1
php7.3-mysql 7.3.14-6+ubuntu18.04.1+deb.sury.org+1
php7.2-mysql 7.2.27-5+ubuntu18.04.1+deb.sury.org+2
php7.1-mysql 7.1.33-9+ubuntu18.04.1+deb.sury.org+1
php7.0-mysql 7.0.33-20+ubuntu18.04.1+deb.sury.org+1
php5.6-mysql 5.6.40-21+ubuntu18.04.1+deb.sury.org+1
You should explicitly select one to install.
どうやら自分のPHPのバージョンに合わせて明示的にインストールする必要があるらしい。
sudo apt-get install php8.0-mysql
これを実行後、先のsample.py
がOKと出力され根本のサーバーエラーも解消した。
sudo apt-get install php-mysql
実行時にバージョンに合わせてインストールしてくれてるように見えたが、ダメだった(?)みたい。
参考記事