PHP connexion à un serveur MySQL distant
Quand j'essaie de me connecter au travers de l'enveloppe de la machine locale à un serveur MySQL distant je peux réussir à se connecter:
> mysql -h remotehost -u myuser -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Mais quand j'essaie de me connecter par le biais d'un script PHP à l'aide de
$serverName = "remotehost"; //here I put the actual IP address
$userName = "myuser";
$passCode = "actualpassword";
mysql_connect($serverName,$userName,$passCode);
J'obtiens l'erreur suivante
Warning: mysql_connect(): Accès refusé pour l'utilisateur "myuser'@'localhost'
(using password: YES)
Le serveur MySQL distant version est 5.1.52 et la version de PHP sur la machine locale est 5.3.10-1ubuntu3.4
J'ai trouvé une question similaire, mais la réponse ne résout pas mon problème:
problème de connexion à la base de données mysql distante à l'aide de php
J'apprécierais vraiment de l'aide!
MODIFIER:
La sortie de php -i | grep "mysql"
/etc/php5/cli/conf.d/mysql.ini,
/etc/php5/cli/conf.d/mysqli.ini,
/etc/php5/cli/conf.d/pdo_mysql.ini
mysql
MYSQL_SOCKET => /var/run/mysqld/mysqld.sock
MYSQL_INCLUDE => -I/usr/include/mysql
MYSQL_LIBS => -L/usr/lib/i386-linux-gnu -lmysqlclient_r
mysql.allow_local_infile => On => On
mysql.allow_persistent => On => On
mysql.connect_timeout => 60 => 60
mysql.default_host => no value => no value
mysql.default_password => no value => no value
mysql.default_port => no value => no value
mysql.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock
mysql.default_user => no value => no value
mysql.max_links => Unlimited => Unlimited
mysql.max_persistent => Unlimited => Unlimited
mysql.trace_mode => Off => Off
mysqli
MYSQLI_SOCKET => /var/run/mysqld/mysqld.sock
mysqli.allow_local_infile => On => On
mysqli.allow_persistent => On => On
mysqli.default_host => no value => no value
mysqli.default_port => 3306 => 3306
mysqli.default_pw => no value => no value
mysqli.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock
mysqli.default_user => no value => no value
mysqli.max_links => Unlimited => Unlimited
mysqli.max_persistent => Unlimited => Unlimited
mysqli.reconnect => Off => Off
PDO drivers => mysql
pdo_mysql
pdo_mysql.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock
- Vous dire que ses un serveur distant, mais le message d'erreur indique que localhost. Qui est-il?
- c'est l'erreur que je reçois dans la machine locale quand j'essaie de me connecter au serveur distant
- myuser n'est autorisé à se connecter à partir de localhost. Vous avez besoin de changer/ajouter un utilisateur qui permet à votre ordinateur hôte.
- Pourquoi êtes-vous à l'aide de la longue-déconseillé
mysql_
bibliothèque de code? Elle a été abandonnée il y a plusieurs années et supprimé dans les PHP7. Aucun nouveau code doit être écrit à l'aide de cette bibliothèque. Il vous laisse vulnérable à des attaques par injection SQL (en raison de l'absence de prise en charge des requêtes paramétrées) et, potentiellement, d'autres les vulnérabilités non corrigées. Commutateur à l'aide demysqli
ouPDO
dès que possible, et puis apprendre comment écrire des requêtes paramétrées pour protéger vos données à partir des entrées malveillantes. Voir bobby-tables.com pour une explication simple des risques et des exemples de code PHP pour écrire des requêtes en toute sécurité. - mysql_ a été utilisé seulement à des fins d'illustration
- Ok, bon, mais nous n'étions pas à le savoir. Je vois beaucoup de véritable code, là où les gens sont de l'écriture de nouveaux logiciels à l'aide, ce qui est très inquiétant. Je ne peux que supposer que les gens sont involontairement à la suite de très out-of-date de tutoriels ou de quelque chose.
Vous devez vous connecter pour publier un commentaire.
Avant de poursuivre, de confirmer l' $serverName variable est vraiment une adresse distante, soit un nom d'hôte ou une adresse IP. Alors...
Avez-vous post code? Si oui, vous avez oublié de joindre les chaînes de caractères entre guillemets:
Vous devez autoriser l'accès à distance à la base de données mySQL(sur le serveur où vous avez mySQL db). Si vous êtes en utilisant CPanel ou Plesk, vous pouvez le faire dans le panneau de contrôle. J'ai eu ce problème, apparemment mySQL configuration par défaut est de n'autoriser que localhost.
Vous avez besoin pour accorder l'accès de l'utilisateur à être accessible par l'adresse IP de votre serveur. Souvent, l'utilisateur MySQL est verrouillé pour le localhost.
Un moyen rapide de le faire ce serait de regarder le tableau
mysql.users
et de voir si l'utilisateur est verrouillé pour le localhost.Il ya beaucoup de belles Interfaces graphiques qui peuvent vous aider à ajouter des hôtes, mais la plupart de façon manuelle possible serait d'ajouter une autre ligne à la DB. Vous pouvez changer l'hôte de '%' pour tester mais qui ouvre et est moins sûr.
phpinfo
ou à partir de la ligne de commandephp -i | grep "mysql"
Utilisation
SHOW GRANTS
pour voir si l'utilisateur que vous essayez de vous connecter avec a l'autorisation de se connecter à partir du serveur web IP ou nom de domaine.Utiliser le
GRANT
commande pour donner accès à distance à votre utilisateur web, pour ainsi dire. Quelque chose comme cela.De référence de MySQL 5.1 manuel pour la syntaxe exacte. MySQL 5.1 Manuel: SUBVENTION
Je pense vraiment que ce n'est pas une SUBVENTION problème depuis que vous utilisez le même utilisateur sur le même serveur
Êtes-vous sûr de définir le bon $serverName variable. Ce doit être l'adresse IP à DISTANCE.
Vous avez probablement un serveur mysql local qui répond aussi qui est en train de vous confondre.