2009-08-27 10 views
21

多分私はここで本当に単純なものを見逃してしまったかもしれませんが、私はこれを理解できないようです。MySQLのPHPの非互換性

私はWAMPをローカルで実行していますが、リモートのMySQLデータベースに接続しています。 PHPのローカルバージョンは最新の5.3.0です。

バージョン5.0.45のリモートデータベースの1つが問題なく動作します。しかし、私が接続しようとしている他のリモートデータベース(バージョン5.0.22)は、死ぬ前に以下のエラーをスローします:

警告:mysql_connect()[function.mysql-connect]:OKパケット6バイト期待より短くPID = 5880で...

警告:にmysql_connect()[function.mysql-接続]:mysqlndは古い認証を使用して4.1以上のMySQLに接続することはできませんで...

WTF?

UPDATE:5.3.0より低いPHP 5.2に戻す

*つまり何が問題を完全に解決します。 5.3.0を実行していない限り、私は両方のデータベースに接続できます。私はこの奇妙さの説明が何であるか分かりません。

+0

mysqlndは5.2の一部ではありません。つまり、php 5.2に戻ったので、別のコネクタ/ libを使用しています。 – VolkerK

+0

だから、5.3の問題はどうだったでしょうか? – Evernoob

答えて

41

使用しているMySQLアカウントには、古い16文字のパスワード(ハッシュ)が含まれている可能性があります。
これは、HeidiSQL、MySQLコンソールクライアント、または他のクライアントのようなMySQLクライアントと、mysqlにアクセスできるアカウントでテストできます。 userテーブル。パスワードフィールドに16文字が含まれている場合は古いパスワードで、mysqlndではこれを使用してMySQLサーバーに接続できません。サーバーがuse/create old passwords by defaultに設定されている場合にも確認する必要があり

あなたは

SET PASSWORD FOR 'username'@'hostmask' = PASSWORD('thepassword') 

と、そのユーザーの新しいパスワードを設定することができますがdev_mysql_set_password

編集を参照してください。

EDIT2:
は5.0.22サーバー( "失敗" だ1)上のクエリ

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

を実行してください。 mysql_connect()で使用しているアカウントでusernameを置き換えてください。
何が返されますか?

+0

両方の認証が同じで、それほど長いものではありません。 – Evernoob

+0

「長くはありません」私は普通のパスワードを意味するのではなく、ユーザーテーブルに格納されたハッシュ;-)古いアルゴリズムは16文字、新しい... uhm ... 40? – VolkerK

+0

ええ...まだ残念です。これは私を迷惑にしている奇妙なエラーです。 – Evernoob

1

私のwebhostにはPHP/MySQLの異なるバージョンが設定されており、特定のものを使用しています。正しい.php拡張子 - 特に.php5を使用する必要があります。

+0

申し訳ありません、私は恐れています。 – Evernoob

4

データベースサーバーは既定で古いパスワードを使用するように設定されています。あなたが得るエラーメッセージは、新しい(より安全な)認証をサポートすることができますが、それを拒否するデータベースを見るmysqlndです。そのような場合、mysqlndは接続を中止し、動作を拒否します。あなたは私からその設定をコメントアウトした後

は、あなたのmy.cnfが

old-passwords = 1 

を持っていないことを確認してください。cnf(または他の場所から削除してください)、そしてサーバを再起動してください.VolkerKが説明するコマンドを使ってパスワードを再設定してください。そうでないと、ログインできなくなります。

+0

私はmy -iniにol-passwords = 1を持っていないので、古いパスワードを使わないようにデータベースサーバを変更するには – Sid

+1

@sid:MySQLは複数の設定ファイルを読み込むことができます。パスワードを有効にしました。別の可能性は、グローバル変数 'old_passwords'が1に設定されていることです。チェックするには、SELECT @@ global.old_passwords;を実行してください。 – Guss

7

私は持っていますこの問題の簡単な修正を見つけることを試みてきました。このアプローチを試してみてください。あなたは、ユーザーの上OLD_PASSWORDを使用しているかのMySQLの古いバージョンを実行してきたので、

SELECT Host, User, Password FROM mysql.user; 

パスワードは16文字であればMySQLのタイプでは、これがあります。タイプを更新するには

UPDATE mysql.user SET Password=PASSWORD('newpass') 
    WHERE User='root' AND Host='localhost'; 
FLUSH PRIVILEGES; 

ユーザー、ホスト、パスのそれぞれのローカルホストとnewpassを交換してください。今すぐ再入力するとき

SELECT Host, User, Password FROM mysql.user; 

パスワードが変更されているはずです。これは私のためにそれを固定した。ユーザーEvernoobは、上記

+1

最も単純な修正!パスワードを同じ古いパスワード(パスワード= PASSWORD( 'oldpass'))に更新することも有効です。 – kehers

+1

サーバがデフォルトで16文字のパスワードを作成している場合は、これを修正することができます: 'SELECT PASSWORD( 'yourpass');でローカルマシン上に41文字のハッシュを作成し、印刷されたハッシュをこれをサーバマシン上で実行してください: 'UPDATE mysql.user SET Password = 'yourhash' WHERE User = 'root'; FLUSH PRIVILEGES; '。 – tanius

2

を言ったように:

「PHP 5.2に戻す5.3.0より低い*つまり何が問題を完全に解決する限り、私は両方に接続することができます5.3.0を実行しているわけではないとして。この奇妙なことについての説明がわかりません」

oldpasswordオプションを使用している共有ホース(ここではDreamHost)に接続する場合、ユーザーテーブルを変更できませんでした。これらの提案されたオプションは、他のシナリオでも機能します。共有Webホスティングでは機能しません。

私たちはWAMPを実行しています。

1

PHP 5.2に戻す*トリックをやった!ありがとうございました!

あなたはWAMP ...左クリックWAMP> PHPを使用している場合>バージョン>続きを得る>

は、あなたがしたいバージョンとダウンロードを選択します。

は> PHP>バージョン> PHP 5.2をWAMPクリック/インストール

は左exeファイルを実行します。*この問題を修正し

。私はこれらのSQLコマンドを実行することができませんでした "ユーザー 'XXX' @ 'localhost'"エラーにコマンドが拒否されました。 SU 'ルート'としてログオンしようとしています。たぶん個人的なサーバーでは、実際のホスト上で起こるつもりはない。

3

さらに簡単な解決策は、データベースユーザーを削除し、同じユーザー名とパスワードで新しいユーザーを作成することです。

+0

これは、私が 'ppa:ondrej/php'を更新することを決めたときに起こったことです。私はまた、私のapache2サービスを更新しなければならなかった。長い話を簡単に言えば、このmysqlの問題は私に起こった。 私はこのソリューションが私のために働いたと言いたいと思っていました。私は新しいユーザーを作成する手間を省く必要もありませんでした。私は単に私の既存のユーザーのパスワードを更新するだけでした。私はこれが他の誰かが道を歩くのを助けることを望みます ご協力いただきありがとうございます。 –

1

WordPressのサイトでこの問題が発生しましたが、突然停止してこのエラーが表示されました。

Webサイトのコントロールパネルにデータベースユーザーのパスワードを変更できるGUIがあります。私は現在のパスワードに変更しようとしましたが、これは現在のパスワードが十分に強くなかったために許可されていませんでした。

データベースのパスワードを新しい強力なパスワードに変更し、自分のwp-config.phpファイルを編集して新しいパスワードを設定しました。

これは機能しました。

だから私の推測では、強力なパスワードを要求するバージョンに、何か、多分MySQLをアップグレードしたホスティングプロバイダです。私にとっては、cpanelのGUIを使ってデータベースユーザーのパスワードを変更し、wp-config.phpを更新することでした。

関連する問題