【PHP】MySQLに接続する(PDO)

  • 投稿 : 2020-06-06
スターサーバーとバリューサーバーで確認しました。
<?php
header("Content-Type: text/html; charset=UTF-8");

//------------------------------
// レンタルサーバーに合わせて書き換える
//------------------------------
//MySQLホスト名
$host = "mysql1.star.ne.jp";
//データベース名
$dbname ="test_db"; 
//MySQLユーザ名
$user = "test_db_user";
//MYSQLのパスワード
$password = "xxxxxxx"; 
//-----------------------------

$dsn = "mysql:host=".$host.";dbname=".$dbname;

try {
      $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
      echo 'Connection failed: ' . $e->getMessage();
}

echo '<br/>';
echo '上記にメッセージが表示されてなければ、接続に成功しています';

PHP: PDO::__construct - Manual

マニュアルのサンプルほぼそのままですが、上記のようなコードでMYSQLに接続できます。

バリューサーバーの場合は、$host = "localhost"; でMYSQLに接続できます。同一サーバーにDBサーバーが存在するので・・。

エラーが出る

Connection failed: SQLSTATE[HY000] [2005] Unknown MySQL server host 'xxxxxxxx' (2)

みたいなエラーが出る場合は、接続に失敗してます。見直してください。

$e->getMessage();で出力してるメッセージは、MYSQL側から返されたエラーをそのまま表示しているようです。

MySQL :: MySQL 5.6 リファレンスマニュアル :: B.3 サーバーのエラーコードおよびメッセージ

上記のマニュアルも参考にして、原因を取り除いてください。

SQLSTATE[HY000] [2005] または SQLSTATE[HY000] [2002]

MySQLホスト名 $host の値が正しくない。正しいホスト名を調べてください。レンタルサーバーとMYSQLが同一のサーバーなら、localhostでもOKだと思います。

レンタルサーバーによっては、MYSQLサーバーとWebサーバーが別になってる場合があるので、その場合はMYSQLサーバーのほうのホスト名を指定してください。

SQLSTATE[42000] [1044]

データベース名 $dbname の値が正しくない。

SQLSTATE[28000] [1045]

MySQLユーザ名 $user か MYSQLのパスワード $password が正しくない。もしくは両方とも正しくない。

MYSQL(DB)に接続できるユーザー/パスワードなので、他の関係ないユーザー/パスワードを指定しても接続できません。

あと、MySQLユーザ名にDBアクセスする権限がない場合もこのエラーになります。

補足

上記のサンプルプログラムで文字化けする

・header("Content-Type: text/html; charset=UTF-8");を書き忘れ
・PHPプログラムファイルを保存する時に、文字コードがUTF-8になっていない

このあたりだと思います。

スポンサーリンク
タグ#PHP#code