ホームページ  >  記事  >  データベース  >  PHP 5.3.0 を使用してリモート MySQL データベースに接続すると、「OK パケットが予想より 6 バイト短い」エラーが発生するのはなぜですか?

PHP 5.3.0 を使用してリモート MySQL データベースに接続すると、「OK パケットが予想より 6 バイト短い」エラーが発生するのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-02 10:35:02131ブラウズ

Why am I getting the

MySQL PHP の非互換性: 接続エラーと解決策について

接続時に「OK パケットが予想より 6 バイト短い」エラーが発生するPHP バージョン 5.3.0 を使用するリモート MySQL データベースでは、不可解な問題が発生する可能性があります。この問題を解決するには、根本的な原因を理解し、適切な解決策を適用することが重要です。

このエラーは、ローカル PHP バージョンとリモート MySQL サーバー間の非互換性を示しています。 PHP バージョン 5.3.0 以降では、MySQL アカウントのパスワードが新しい MySQL 認証プラグインを使用してハッシュされている必要があります。ただし、5.0.22 などの古い MySQL バージョンでは、16 文字のパスワードを使用した古い認証方法が依然として使用されている可能性があります。 PHP 5.3.0 が MySQL サーバーからの応答を正しく解釈できないため、この不一致によりエラーが発生します。

この問題に対処するには、2 つの解決策が考えられます:

  • 新しいパスワードを設定します: エラーが発生しているアカウントについては、MySQL クライアントを使用してコマンド「SET PASSWORD FOR 'username'@'hostmask' = PASSWORD('thepassword')」を実行し、新しいハッシュ化されたパスワードを生成します。これにより、アカウントのパスワードが新しい認証形式に更新されます。
  • MySQL サーバーを構成します: あるいは、MySQL サーバーがデフォルトで古い認証方法を使用するように構成されているかどうかを確認することもできます。その場合は、サーバー設定を変更して、新しい認証プラグインを適用し、古いパスワードを禁止できます。

アカウントが古い 16 文字のパスワードを使用しているかどうかを確認するには、次のクエリを実行します。

SELECT
  Length(`Password`),
  Substring(`Password`, 1, 1)
FROM
  `mysql`.`user`
WHERE
  `user`='username'

問題のある 5.0.22 サーバーで、「ユーザー名」を問題のアカウントに置き換えます。結果がパスワードの長さ 16 で、最初の文字が 16 進数字 (0 ~ 9 または A ~ F) である場合は、古いパスワードであることを示しています。

根本的な原因を理解し、適切な解決策を適用することで、次のことが可能になります。 MySQL PHP の非互換性を解決し、リモート データベースへの正常な接続を確立します。

以上がPHP 5.3.0 を使用してリモート MySQL データベースに接続すると、「OK パケットが予想より 6 バイト短い」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。