私は2つの環境を持っています:
- 開発: Windows 7、PHP 5.3.24、Apache 2.2.24
- プロダクション: Linux、PHP 5.4.10、Apache
どちらもリモートMySQL 5.5.24
サーバーに接続します。リモート接続が許可されます。
すべての mysql 関数を に置き換えましたmysqli
。本番環境では問題なく接続できますが、開発環境では次のエラーが発生します。
Premature end of data (mysqlnd_wireprotocol.c:553)
OK packet 1 bytes shorter than expected
mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD('your_existing_password'). This will store a new, and more secure, hash value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file
MySQL が 4.1ではなく 5.5.24 であり、old_passwords
設定されているという奇妙なことOff
。ユーザーのパスワードも変更しました(ホスティングパネルから、MySQL自体でそれを行う管理者権限がありません)。
新しいバージョンの PHP (5.4.15) を試してみましたが、問題は解決しません。
私が読んだすべての参照は、古いMySQLサーバー(この場合ではありません)、old_passwordの問題(本番環境で問題なく接続するため、この場合ではありません)を指しています。
アップデート:
古いmysql
関数も機能しません。mysql を mysqli に変更する前は、PHP 5.2.* バージョンを使用していましたが、動作しました。したがって、問題は bundled に関係しているとほぼ確信していmysqlnd
ます。