PHPでは、 connect()関数(またはmysqliのmysqli_connect()などの類似の接続関数)は、データベース接続を実装する重要なステップです。接続の障害は開発において一般的な問題です。特に初心者にとっては、トラブルシューティングの問題は難しい場合があります。この記事では、接続障害の上位10の一般的な原因を詳細に分析し、対応するソリューションを提供して、問題をより速く見つけるのに役立ちます。
理由: connect()関数のホスト名(ホスト)は誤って入力されます。これは、間違ったIPアドレスまたはドメイン名として書かれていることがよくあります。
解決:
データベースサーバーアドレスが正しいかどうかを確認してください。たとえば、それを書く正しい方法は似ているはずです:
$conn = mysqli_connect('m66.net', 'username', 'password', 'database');
データベースがローカルマシン上にある場合は、 「127.0.0.1」または「LocalHost」を使用することをお勧めします。
原因:データベースアカウントまたはパスワードが誤って入力されているため、ID検証の障害が発生します。
解決:
$conn = mysqli_connect('m66.net', '正しいユーザー名', 'パスワードを修正します', 'データベース名');
if (!$conn) {
die('接続に失敗しました,エラーメッセージ:' . mysqli_connect_error());
}
ユーザー名とパスワードが正しいことを確認し、アクセス権を持っていることを確認してください。
原因: MySQLまたはその他のデータベースサービスが実行されていないため、接続を確立できません。
解決:
データベースサービスが開始されたことを確認してください。コマンドラインを介して実行できます。
sudo service mysql status
または、システムのサービス管理ツールを使用してサービスを開始します。
原因:ファイアウォールはデータベースポートへのアクセスをブロックします(デフォルト3306)。
解決:
サーバーファイアウォールの設定を確認して、ポート3306(またはカスタムポート)が開いていることを確認してください。 Linuxで一般的に使用されるコマンド:
sudo ufw allow 3306
クラウドサーバーは、セキュリティグループルールを変更する必要がある場合もあります。
原因:接続中に間違ったポート番号が指定されました。
解決:
デフォルトのポートは3306です。データベースがカスタムポートを使用する場合、明確に指定する必要があります。
$conn = mysqli_connect('m66.net', 'username', 'password', 'database', 3307);
原因:ユーザーは、現在のホストからデータベースにアクセスする権限がありません。
解決:
データベースにログインし、承認コマンドを実行します。
GRANT ALL PRIVILEGES ON database.* TO 'username'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
ここでは、「%」とは、すべてのホストがアクセスできることを意味し、特定のIPも指定できます。
原因: MySQLIまたはPDO拡張機能はPHP環境にインストールされていないか、バージョンが互換性がありません。
解決:
PHP環境が関連する拡張機能を正しくインストールしたかどうかを確認します。
php -m | grep mysqli
インストールされていない場合は、次のようなインストールにパッケージマネージャーを使用する必要があります。
sudo apt-get install php-mysqli
原因:ネットワークの遅延または不安定性、接続要求がタイムアウトします。
解決:
データベースサーバーをpingして、ネットワークがスムーズであることを確認してください。
ping m66.net
ネットワーク環境を最適化するか、必要に応じて接続タイムアウト設定を追加します。
原因:ドメイン名を正しく解決できず、接続の障害になります。
解決:
代わりにIPアドレスで接続するか、ネイティブDNS構成を確認してください。
$conn = mysqli_connect('192.168.1.100', 'username', 'password', 'database');
原因:サーバーのデータベースバージョンは、特定の接続メソッドを制限するか、 my.cnfなどの構成ファイルをリモート接続を制限します。
解決:
データベース構成ファイルを確認し、バインディングアドレスを確認します。
bind-address = 0.0.0.0
データベースサービスを再起動した後、すべてのIP接続が許可され、効果的であることを示します。