2009-03-22 22 views
0

私はローカルホスト上でウェブを作っていましたが、ホスト上でそれを移動しようとしたときに、私に多くのエラーが表示されます。私のローカルデータベースに接続できないようです。ここでは、コードがあります:リモートmysql接続

$host = "myip"; 
$user = "root"; 
$pass = ""; 
$db = "mydatabase"; 

mysql_connect($host, $user, $pass); 
mysql_select_db($db); 
$on = mysql_fetch_row(mysql_query("SELECT COUNT(online) FROM characters WHERE online=1")); 
echo "<br>Online: $on[0]<br><br>"; 

そして、ここでは出力です:ヘルプ

答えて

4

ため

Warning: mysql_connect() [function.mysql-connect]: Host 'myip' is not allowed to connect to this MySQL server in * on line 46 

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in * on line 48 

Online: 

おかげでこれは、MySQLのユーザー権限の問題です。たとえば、phpmyadminで新しいユーザーを作成し、localhostから接続する場合はlocalhostにホストを設定し、外部から接続する場合は%hostを設定します。

+1

公正な警告: '%'は* any * hostからのアカウントを開きます。ホストを可能な限り具体的にすることがベストプラクティスです。 – Riedsio

3

Alekcが正常に述べたように、それは許可の問題です:

あなたはMySQLのプロンプトでこれを行うことができます。

続く
grant all privileges on mydatabase.* 
    to [email protected]'your_ip_address' 
    identified by 'your_password'; 

:その後、

flush privileges; 

し、再接続してみてください再び。ことに留意してください:

your_ip_adress:それはない MySQLサーバのIPアドレスが、どこから接続しているIPアドレスです your_passwordに(Webサーバー?):PHP側の接続を確立するときに使用しなければならないものです

この解決策は機能するはずですが、特権をWebアプリケーションで使用するユーザーに付与することはお勧めできません。少ない権限で同じ操作を実行できます。

あなたはすてきなGUIフロントエンドでこれを行うことができます。私はコマンドラインを好む。

+0

FLUSH PRIVILEGESは、mysqlデータベース内のテーブルを直接変更した場合にのみ必要で、GRANTまたはREVOKEを使用してテーブルを更新した場合は変更しないでください。良い投稿ですが、+1。 :) –

+0

ああ!そうですか。どうもありがとう。それはいつもこれのようでしたか?バージョン3でMySQLを使い始めましたが、私はいつもテーブルのパーミッションを変更してから "フラッシュ特権"を使いました。 :-) –

+0

すべてのクライアントを許可するために 'your_ip_address'の代わりに'% 'と書くことができますか? –

関連する問題