connect()関数を使用してPHPのデータベースに接続する場合、「アクセス拒否」エラーに遭遇することは一般的な問題です。このエラーは、一般に、データベースに接続する権限が許可されていないため、接続の障害が発生することを示しています。この記事では、このような問題をトラブルシューティングするためのアイデアと具体的な方法を詳細に紹介し、問題をすばやく見つけて解決するのに役立ちます。
「アクセス拒否」は通常、データベースサーバーが接続要求を拒否する可能性があります。
間違ったユーザー名またはパスワード
接続されたホストはデータベースにアクセスできません
データベースユーザー許可が不十分です
データベースサーバーの構成制限
このタイプの問題は、MySQLなどのリレーショナルデータベースで一般的です。
PHPコードでは、データベースに接続するコードは以下に似ています。
<?php
$servername = "m66.net";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";
// 接続を作成します
$conn = new mysqli($servername, $username, $password, $dbname);
// 接続を確認してください
if ($conn->connect_error) {
die("接続に失敗しました: " . $conn->connect_error);
}
echo "接続に正常に";
?>
$ usernameと$パスワードが正しいことを確認してください。間違ったユーザー名またはパスワードにより、「アクセス拒否」を引き起こす可能性があります。
MySQLユーザー許可は、ユーザー@localhostやuser@192.168.1.1など、ユーザー名とホストの組み合わせに基づいています。
IPアドレスまたはリモートホストを使用して接続する場合は、データベースユーザーが対応するホストにアクセスできることを確認してください。
SELECT user, host FROM mysql.user WHERE user='your_username';
アクセス許可が不十分な場合は、次のコマンドを使用してアクセス許可を追加できます。
GRANT ALL PRIVILEGES ON your_database.* TO 'your_username'@'your_client_ip' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;
デフォルトでは、MySQLサーバーはローカル接続のみを許可します。 MySQLD構成ファイルのバインドアドレス設定により、リモートアクセスが可能かどうかを確認する必要があります。
通常、構成file /etc/mysql/my.cnfは次のとおりです。
bind-address = 0.0.0.0
すべてのIP接続が許可されていることを示します。 127.0.0.1の場合、ローカル接続のみが許可されます。
ファイアウォールは、データベースポート(通常3306)が一般に公開されないため、接続できなくなります。コマンドを使用してポート接続を検出してみてください。
telnet m66.net 3306
接続が失敗した場合は、ファイアウォール設定を確認してください。
接続が失敗すると、 mysqli_connect_error()は特定のエラーメッセージを与えることができます。
<?php
$conn = new mysqli("m66.net", "your_username", "your_password", "your_database");
if ($conn->connect_error) {
die("接続に失敗しました: " . $conn->connect_error);
}
?>
エラープロンプトと組み合わせて、ターゲットを絞ったトラブルシューティングを実施します。
Connect()関数を使用してPHPの「アクセス拒否」エラーが発生したら、次の側面で確認する必要があります。
ユーザー名とパスワードが正しいかどうかを確認してください
データベースユーザーが対応するホストにアクセスできるかどうかを確認します
データベースサーバーのリモートアクセス構成を確認します
ネットワークとファイアウォールの設定を確認します
エラーメッセージを使用して、ポジショニングを支援します
上記の手順を通じて、基本的に接続拒否の問題を見つけて解決できます。