2009-03-22 6 views
0

Je faisais un site sur localhost et quand j'ai essayé de le déplacer sur l'hôte, il me montre beaucoup d'erreurs. On dirait qu'il ne peut pas se connecter à ma base de données locale. Voici le code:Connexion mysql à distance

$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>"; 

Et voici la sortie:

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: 

Merci pour l'aide

Répondre

4

C'est un problème d'autorisation utilisateur mysql. Créez un nouvel utilisateur avec phpmyadmin par exemple et définissez son hôte sur localhost si vous vous connectez depuis localhost, ou sur% si vous vous connectez depuis l'extérieur.

+1

Avertissement correct: '%' ouvre le compte à partir de * tout * hôte ... la meilleure pratique consiste à rendre l'hôte aussi spécifique que possible. – Riedsio

3

Comme Alekc correctement dit, il y a un problème d'autorisation:

Vous pouvez le faire à l'invite MySQL:

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

Suivi par:

flush privileges; 

Et puis essayez de vous reconnecter encore. Gardez à l'esprit que:

your_ip_adress: il est pas l'adresse IP du serveur MySQL, mais l'adresse IP que vous connectez à partir votre_mot_de_passe (votre serveur web?): Est celui que vous devez utiliser pour établir la connexion sur le côté PHP

Rappelez-vous également que, même si cette solution fonctionne, il n'est pas recommandé d'accorder tous les privilèges à un utilisateur qui sera utilisé par une application Web. Vous pouvez faire la même chose avec moins d'autorisations.

Vous pouvez faire tout cela avec une belle interface graphique. Je préfère la ligne de commande.

+0

FLUSH PRIVILEGES n'est nécessaire que lorsque vous avez directement modifié les tables de la base de données mysql, et non lorsque vous les avez mises à jour avec GRANT ou REVOKE. Bon post cependant, +1. :) –

+0

Oh! Je vois. Merci beaucoup. Était-ce toujours comme ça? J'ai commencé à utiliser MySQL avec la version 3 et j'ai toujours utilisé les "privilèges flush" après avoir changé certaines permissions sur les tables. :-) –

+0

Peut-on écrire '%' à la place 'your_ip_address' pour autoriser tous les clients? –