-1

ローカルのMySQLデータベースに接続しようとすると、次の3つの方法で異なる結果が得られます。

  1. プロンプトから次のように接続すると機能します。

    mysql -u root -p

この方法でパスワードの入力を求められ、入力すると接続されます。

  1. PHPに接続し、サーバー(localhost)、ユーザー名(root)、およびパスワードを指定すると機能します。

  2. PHPに接続して次のようなコマンドを実行すると機能しません。

    exec('mysql -P 3306 -u root-p'。$password。'databasename<'。$scriptfilename);

また、最初の行にパスワードを入力すると、プロンプトから機能させることができません。

mysql.userテーブルでユーザーrootを照会すると、次の3つのエントリがあります。

root @ :: root@127.0.0.1 root @ localhost

同じ行にパスワードを入力すると、次のエラーが発生します。

エラー1045(28000):ユーザー'root' @'localhost'のアクセスが拒否されました(パスワードを使用:YES)

誰かが何が起こっているのか知っていますか?

4

3 に答える 3

1

パスワードにシェルが解釈する特殊文字が含まれている場合、それらをエスケープしない限り問題が発生します。たとえば、句読点が多いと、、、などの問題が発生し!ます。><|

ただし、一般的には、パスワードをサポートできる場合は、コマンドラインにパスワードを入力しないでください。

MySQLの5.3.2.2を引用します。パスワードセキュリティドキュメントのエンドユーザーガイドライン:

コマンドラインで-pyour_passまたは--password=your_passオプションを使用します。

これは便利ですが安全ではありません。他のユーザーがコマンドラインを表示するために呼び出す可能性のあるpsなどのシステムステータスプログラムにパスワードが表示されるためです。

もう1つのオプションは、関連するユーザーのみが読み取ることができるファイルにパスワードを保存し、クライアント構成ファイルを使用することです。

パスワードをオプションファイルに保存します。

[client]
password=your_pass

その場合、コマンドラインは次のようになります。

mysql --defaults-file=/path/to/file_with_password
于 2012-04-04T16:08:17.663 に答える
1

次のようにホストパラメータを追加するだけです。

exec('mysql -P 3306 -h localhost -u root -p'.$password.' databasename < '.$scriptfilename);
于 2012-04-04T15:36:49.127 に答える
0

-pではなく--password=を使用してみてください。信頼性が高いことがわかりました。

于 2012-04-04T15:38:34.413 に答える