12

phpmyadmin では正常に接続できますが、php スクリプトを使用して mysql に接続できないようです。パスワードを使用してユーザーを作成し、データベースに適切な特権を与えましたが、接続するたびにアクセスが拒否されて終了します。Windows XPボックスでxamppを使用しています。ファイアウォールはすべて無効になっており、ユーザー名とパスワードが正しいことを確認しました。コードは次のとおりです。

$conn=mysql_connect('localhost','westbrookc16','megadots') || die (mysql_error());

ユーザー名は特定の形式である必要がありますか?

4

8 に答える 8

17

ここでの問題は、あなたがそれを許可したホストであるという予感がありますが、それは実際には知識に基づいた推測にすぎません。アクセスmyuser@'127.0.0.1'またはサーバーの実際のIPアドレスを許可すると、ホストとしてlocalhostを使用して接続することはできなくなります。これは、「localhost」がホストとして指定されている場合、phpはネットワークソケットの代わりにunixソケットを使用することを想定し、そのコンテキストでは127.0.0.1はlocalhostと同じではないためです。

mysql_connect()の手動エントリから:

注:サーバーとして「localhost」または「localhost:port」を指定すると、MySQLクライアントライブラリはこれをオーバーライドし、ローカルソケット(Windowsではパイプという名前)に接続しようとします。TCP / IPを使用する場合は、「localhost」の代わりに「127.0.0.1」を使用してください。MySQLクライアントライブラリが間違ったローカルソケットに接続しようとする場合は、PHP構成でランタイム構成として正しいパスを設定し、サーバーフィールドを空白のままにする必要があります。

これが完全に冗長ではないことを願っています。:)

于 2009-03-20T23:07:44.930 に答える
6

私はこれを以前に見ましたが、あるmysqlユーザーはphp経由でログインし、別のユーザーはログインしません。ユーザーがコマンドラインから作業することもありますが、phpからは作業しません。

それは常にエミルが2つを参照しているものでした。mysqlユーザーは、実際にはユーザーとホストのペアです。したがって、ユーザーmegadots@localhostとユーザーmegadots@mycoolhostは、2つの別個のレコードとしてmysql.userテーブルにリストされます。

コマンドラインからログインできる場合は、このクエリを実行します。

SELECT user, host FROM mysql.user

ユーザーとそのホストの完全なリストが表示されます。

動作しているphpMyAdminユーザーを認識した場合は、おそらく使用したいホストであるホスト列を確認してください。

ホストをリセットするには、これらのクエリを実行します(!mysqlのインストール全体でprivilagesテーブルを操作する場合は注意してください)

update mysql.user set host = 'hostname' 
where user = 'username' and host = 'oldhostname';

flush privileges;

ユーザー名と%が他のすべてよりも優先されるホストとしてのレコードが表示され、ユーザーに複数のレコードがあり、そのうちの1つのホストとして%が存在する場合、ホストとして%が使用されているユーザー名がパスワードが間違っていて、username @ localhostのパスワードを何度リセットしても、ログイン時にusername @%と比較されるため、無効になります。

于 2009-03-21T00:26:59.140 に答える
2

私の場合、使用していたデータベースの作成に使用したユーザーを削除してしまいました。通常、これにより「ユーザー指定の定義者が存在しません」というエラーが発生するはずですが、何らかの理由で、より一般的なアクセスが拒否されて PHP コードに返されるだけでした。コマンドラインやその他のインターフェースからログインできた理由がわかりません。私の問題を修正するために、削除されたユーザーを再作成しました。

于 2012-07-14T21:19:39.530 に答える
2

Linux を使用している場合は、シナプス パッケージ マネージャーを使用して、PHP と MySQL が必要とするすべてのライブラリと mod を見つけてダウンロードし、両方が接続できるようにします。私の問題は、単独で実行されている PHP スクリプトがサーバー側で機能することでしたが、PHP スクリプトを使用して MySQL に接続しようとすると、接続されず、プレーンな白いページしか表示されませんでした。次に、PHP が MySQL に接続するために使用する MySQL クライアント ライブラリがないことに気付きました。MySQL サーバー ライブラリしかありませんでした。クライアント側のライブラリをインストールして apache サーバーを再起動すると、PHP スクリプトは問題なく接続できるようになりました。デフォルトでは、PHP 5 は MySQL クライアント側ライブラリと共にインストールされません。

于 2011-12-19T21:27:01.010 に答える
0

そして、データベースに適切な特権を与えました

どのように?許可するときにユーザーに使用したホストは何ですか?

通常は次のようにします。

GRANT ALL ON mydb.* TO 'someuser'@'somehost' identified by 'password';
FLUSH privileges;

あなたの場合、「somehost」はおそらく「localhost」または「127.0.0.1」である必要があります(他の投稿を参照)

構文リファレンス: http://dev.mysql.com/doc/refman/5.1/en/grant.html

于 2009-03-20T23:01:22.233 に答える
0

これは入力ミスか、権限が付与されていないかのいずれかです。これらを見つけるのは驚くほど難しい場合があります。

phpmyadmin を使用しないで、SQLYOGのコピーをダウンロードし(無料のコミュニティ エディションはすばらしい)、それを介してユーザーでログインすることをお勧めします。問題を診断したら、ユーザー名/パスワードをコピーしてスクリプトに貼り付けます。

ちなみに、phpmyadmin も問題ありませんが、一般的には sqlyog などのプログラムの方が便利なので、とにかくチェックしてみる価値があります。sqlyog が好みに合わない場合は、他にいくつかの無料または商用の代替手段があります。

于 2009-03-20T23:03:29.997 に答える
0

同様の問題が発生した後、「127.0.0.1」を「localhost」に置き換えるとうまくいくことがわかりました(「localhost」を使用して端末経由で正常に接続できたにもかかわらず)。

于 2013-07-02T19:30:04.250 に答える