MySQLへの接続 (mysqli)

MySQL, PHPmysqli

MySQLへの接続はPHPを使用してWEBサイトを作成している場合、90%以上の確率で必須ですね。

個人的にはPHPはMySQL等のデータベースと連携することによりお役立ち度が倍増すると思っています。

PHPでMySQLに接続するには以下の主に以下の2通りがあります。

PHPからMySQLへ接続する方法

(ほかにもあったら教えてください。)

  • mysqli
  • mysqli_connect
  • PDO

mysqli


“mysql_…”が PHP5.xから非推奨となり、PHP7で廃止されました。

mysqli はその代替/後継として考えます。

mysqli_connect

mysqli_connect — mysqli::__construct() のエイリアス

参照:http://php.net/manual/ja/function.mysqli-connect.php

PDO

MySQL以外のデータベースに接続する際も同じ関数を使用可能なようです。

PostgreSQLは利用可能なようですが、他はわかりません。

mysqliで接続する

MySQL以外のデータベースを使用する予定は当面ないので、今回はmysqliでの接続について検証。

(mysqli_connectはmysqliについて考えればおのずと理解できるような気がするので今回は割愛)

データベースへ接続

以下のように接続します。

$mysqli = new mysqli(サーバー名, ユーザー名, パスワード, データベース名, ポート(任意), ソケット(任意));

$mysqli に戻り値が格納されます。

どのような値が格納されているか確認してみましょう。

接続に成功した場合

以下の項目を確認できました。

※エラー関連以外は値を削除しています。

[“affected_rows”]=>
[“client_info”]=>
[“client_version”]=>
[“connect_errno”]=> int(0)
[“connect_error”]=> NULL
[“errno”]=> int(0)
[“error”]=> string(0) “”
[“error_list”]=> array(0) { }
[“field_count”]=>
[“host_info”]=>
[“info”]=>
[“insert_id”]=>
[“server_info”]=>
[“server_version”]=>
[“stat”]=>
[“sqlstate”]=>
[“protocol_version”]=>
[“thread_id”]=>
[“warning_count”]=>

接続に成功した場合(エラーがない場合)、[“connect_errno”] [“connect_error”]
は以下のようになるようです。

[“connect_errno”]=> int(0)
[“connect_error”]=> NULL

では、エラーを発生させてこの戻り値とほかの戻り値がどのように変化するか確認してみましょう。

接続エラー(パスワード間違いの場合)

以下の戻り値を取得できました。

[“connect_errno”]=> int(1045)
[“connect_error”]=> string(70) “Access denied for user ‘ユーザー’@’xxx.xxx.xxx.xxx’ (using password: YES)”

接続エラー(ユーザー名間違いの場合)

パスワード間違いの場合と同じでした。

[“connect_errno”]=> int(1045)
[“connect_error”]=> string(70) “Access denied for user ‘ユーザー’@’xxx.xxx.xxx.xxx’ (using password: YES)”

接続エラー(サーバー名間違いの場合)

存在しないサーバー名を指定

[“connect_errno”]=> int(2002)
[“connect_error”]=> string(90) “php_network_getaddresses: getaddrinfo failed: hostname nor servname provided, or not known”

接続エラー(データベース名間違いの場合)

存在しないデータベース名を指定。

[“connect_errno”]=> int(1044)
[“connect_error”]=> string(67) “Access denied for user ‘ユーザー’@’%’ to database ‘データベース名'”

まとめ:接続エラー時のエラー番号

上記の結果から接続エラー時のエラー番号は以下であることがわかりました。

エラー番号内容
1045 認証エラー (ユーザー名 or パスワード)
2002サーバー名の間違い
1044 データベース名の間違い

データベースへの接続

上記の検証結果からデータベース接続に成功した場合、以下の値を取得します。

[“connect_errno”]=> int(0)
[“connect_error”]=> NULL

これを踏まえて、データベース接続結果を取得します。

$mysqli = new mysqli(サーバー名, ユーザー名, パスワード, データベース名, ポート(任意), ソケット(任意));

if ($mysqli->connect_error) { //接続に失敗し、「connect_error」がNULLではない場合
echo "データベース接続に失敗しました。"; //エラー詳細非表示
echo $mysqli->connect_error; //エラー詳細表示
}
else {
$mysqli->set_charset("utf8"); //接続に成功した場合、文字コードにutf8を設定し文字化けを防ぐ
}

//後続の処理を記載

後続の処理については後日

続きの記事

MySQL, PHPmysqli