SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【php】mysqlndを使うとMySQLに接続できない?

問題

–with-mysql=mysqlnd でコンパイルしたphpで、既存のMySQLのデータベースに接続しようとすると、エラー(Warning)が発生。接続できない。

$ php -r "mysql_connect('hostname', 'username', 'password');"

Warning: mysql_connect(): Premature end of data (mysqlnd_wireprotocol.c:554) in Command line code on line 1

Warning: mysql_connect(): OK packet 1 bytes shorter than expected in Command line code on line 1

Warning: mysql_connect(): 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 in Command line code on line 1

どうすればよい?

答え

こちらを参照 http://www.php.net/manual/ja/migration53.incompatible.php

php5.3からの下位互換性のない変更に次のものがあります。

新しい mysqlnd ライブラリは、MySQL 4.1 用の41バイトの新しいパスワードフォーマットを使用します。 古い16バイトのパスワードを使うと、mysql_connect() 系の関数は次のようなエラーメッセージを生成します。”mysqlnd cannot connect to MySQL 4.1+ using old authentication”

問題の現象で接続ができなかったのは、古い形式のパスワードのユーザーだったから。

SET PASSWORD FOR 'username'@'hostname' = OLD_PASSWORD('パスワード');

mysqlndを使う場合は、長いパスワードのユーザーを作るしかないですね。

SET PASSWORD FOR 'username'@'hostname' = PASSWORD('パスワード');

関連するメモ

コメント