web-dev-qa-db-ja.com

「接続に失敗しました:ユーザー 'root' @ 'localhost'のアクセスが拒否されました(パスワードを使用:YES)」php関数から

Mysqlデータベースとやり取りするために、php Webページで使用される関数をいくつか作成しました。サーバーでテストすると、次のエラーが表示されます。

"Connect failed: Access denied for user 'root'@'localhost' (using password: YES)" 

(XAMPPを使用して)PCで使用でき、サーバーのコマンドラインを使用してデータベースのテーブル間を移動できます。ただし、Webページは接続に失敗します。パスワードを確認しましたが、結果はありません。それは正しいです(そうでなければ、コマンドラインからmysqlにログインできませんでした)。

関数の呼び出しは次のとおりです。

$conn = new mysqli("localhost", "root", "password", "shop");

サーバーに何か設定する必要がありますか?ありがとう

編集:PHPバージョン5.3.3-7 + squeeze1 mysqlバージョン:5.1.49-3両方のDebian

51
gc5

この方法で解決しました:rootユーザー名でログインしました

mysql -u root -p -h localhost

で新しいユーザーを作成しました

CREATE USER 'francesco'@'localhost' IDENTIFIED BY 'some_pass';

その後、データベースを作成しました

CREATE DATABASE shop;

このデータベースの新しいユーザーに権限を付与しました

GRANT ALL PRIVILEGES ON shop.* TO 'francesco'@'localhost';

次に、ルートからログアウトし、新しいユーザーでログインしました

quit;
mysql -u francesco -p -h localhost

スクリプトを使用してデータベースを再構築しました

source shop.sql;

これで終わりです。今度はphpからの呼び出しで問題なく動作します

 $conn = new mysqli("localhost", "francesco", "some_pass", "shop");

お時間をいただきありがとうございます:)

72
gc5

Root @ localhostのデータベースにユーザーアカウントエントリはありますか? MySQLでは、ホストごとに異なるユーザーアカウント権限を設定できます。接続しているホストと同じ名前の複数の異なるアカウントが存在する場合があります。最も一般的なのは[email protected]とroot @ localhostです。これらは異なるパスワードと許可を持つことができます。 root @ localhostが存在し、必要な設定があることを確認してください。

あなたの説明に基づいて、これが問題であることを賭けたいと思います。別のPCからの接続にはroot @ localhostとは異なるアカウントを使用し、コマンドラインは[email protected]を使用して接続すると思います。

10
queso

これまで述べてきたことから、PHP5.3のMySQLドライバーが古いMySQLバージョン4.1への接続に問題があるという問題のように思えます。 http://www.bitshop.com/Blogs/tabid/95/EntryId/67/PHP-mysqlnd-cannot-connect-to-MySQL-4-1-using-old-authenticationをご覧ください。 aspx

ここにいくつかの有用な回答を含む同様の質問があります 古い認証を使用してMySQL 4.1+に接続できません

SELECT `User`, `Host`, Length(`Password`) FROM mysql.user

これにより、古いパスワードを持つアカウントの場合は16、新しいパスワードを持つアカウントの場合は41が返されます(パスワードをまったく持たないアカウントの場合は0も返されます。 MySQLフロントエンドのユーザー管理ツールを使用する(存在する場合)または

SET PASSWORD FOR 'User'@'Host'=PASSWORD('yourpassword');
FLUSH Privileges
6
Jack Murdoch

私もこの問題を抱えていました。しかし、これは別の理由によるものです。パスワードは文字$で始まりました... $MyPassword私はそれを#MyPasswordに変更し、問題は解決しました。

3
LowLevel

先端:

サーバーに接続できない場合は、pidとソケットファイルをコメントアウトします。mysqlは誤ったpidまたはソケットファイル、あるいはその両方で接続している可能性があるため、サーバーにコマンドラインで接続しようとすると 「見える」 誤ったpid/socketファイルで...

###サーバーに接続できない場合、pidおよびソケットファイルをコメントアウトします。
#pid-file =/var/run/mysql/mysqld.pid #socket =/var/lib/mysql/mysql.sock
0
Dutch Glory

PHPmyAdmin(WAMP)で特権を編集します。パスワードとユーザー名が作成されていないことに注意してください。作成または編集して、PHPのSQL接続で動作するようにします。うまくいけばいい

0
Adesina Yomi

パスワードが設定されておらず、引数としてパスワードを渡している可能性があります。接続中にパスワード引数を省略してみてください。

ほとんどの場合、ユーザーを適切に識別していません。 root @ localhost。 MAMPが使用しているMysqlバージョンを選択します。

/Applications/MAMP/Library/bin/mysqldump -uroot -p db_name > test_db_dump.sql

私は実際に自分のコンピューターにエイリアスを書いたので、binディレクトリへの行き方を覚える必要はありません。

alias mysqldumpMAMP='/Applications/MAMP/Library/bin/mysqldump'

これを実行することができます:

mysqldumpMAMP -uroot -p db_name > test_db_dump.sql

別名をbashプロファイル~/.bash_profileまたは~/.bash_rcに保存できます

0
camdixon

簡単です。

xamppコントロールパネルを開きます->構成-> my.iniをメモ帳で編集します。これを下に追加してください[mysqld]

skip-grant-tables

保存する。 Apacheとmysqlを起動します。

お役に立てば幸いです

0
Miku jessi