MySQL PHP の非互換性: エラーについて
質問に記載されている問題は、ローカルからリモートの MySQL データベースに接続しようとすると発生します。 PHP 5.3.0 を実行する WAMP インストール。 MySQL 5.0.45 を実行しているデータベースへの接続は成功しますが、バージョン 5.0.22 のデータベースに接続すると次のエラーが発生します:
Warning: mysql_connect() [function.mysql-connect]: OK packet 6 bytes shorter than expected. PID=5880 in ... Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using old authentication in ...
説明
この非互換性の根本原因は、接続に使用される MySQL アカウントのパスワードの長さにあります。通常、古いバージョンで作成された MySQL アカウントでは 16 文字のパスワードが使用されていました。ただし、PHP 5.3.0 などの新しいバージョンの PHP では、これらの古いパスワードによる認証はサポートされなくなりました。
解決策
問題を解決するには、影響を受ける MySQL アカウントは、次のようなコマンドを使用してリセットする必要があります。
SET PASSWORD FOR 'username'@'hostmask' = PASSWORD('thepassword')
さらに、サーバーがデフォルトで古いパスワードを使用または作成するように構成されているかどうかを確認することをお勧めします。
診断クエリ
問題をさらに診断するには、問題のある MySQL サーバーで次のクエリを実行してパスワードの長さを判断できます:
SELECT Length(`Password`), Substring(`Password`, 1, 1) FROM `mysql`.`user` WHERE `user`='username'
'username' を次のように置き換えます。データベース接続に使用されている実際のユーザー名は、パスワードの長さとパスワードの最初の文字に関する情報を提供し、古い形式のパスワードかどうかを確認するのに役立ちます。
以上がPHP 5.3.0 からリモート MySQL 5.0.22 データベースに接続すると、MySQL_connect() が「OK パケットが予想より 6 バイト短い」というエラーで失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。