Question

Je ne peux pas sembler se connecter à MySQL avec un script php, même si je peux me connecter très bien avec phpMyAdmin. J'ai créé un utilisateur avec un mot de passe, et lui a donné les privilèges appropriés pour le db, mais à chaque fois qu'il se connecte, il meurt en disant refuser l'accès. J'utilise xampp sur une machine Windows XP. Les firewalls ne sont désactivés, et j'ai vérifié le mot de passe nad nom d'utilisateur sont corrects. Voici le code:

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

noms d'utilisateurs doivent-ils être dans un format ou quelque chose de spécifique?

Était-ce utile?

La solution

J'ai le pressentiment que le problème est ici l'hôte vous avez accordé à, mais il est vraiment pas plus d'une supposition. Si vous accordez myuser@'127.0.0.1' d'accès ou les serveurs adresse IP réelle, vous ne serez pas autorisé à se connecter en utilisant localhost comme hôte. Cela est dû au fait que lorsque « localhost » est spécifié comme hôte, php suppose que vous souhaitez utiliser une prise unix au lieu de sockets réseau, et dans ce contexte est 127.0.0.1 de ne pas la même chose que localhost.

De l'entrée manuelle pour mysql_connect () :

  

Remarque: Chaque fois que vous spécifiez "localhost"   ou « localhost: port » comme serveur, le   bibliothèque client MySQL surchargera   et essayer de se connecter à un locale   douille (canal nommé sous Windows). Si vous   voulez utiliser le protocole TCP / IP, utilisez "127.0.0.1"   au lieu de « localhost ». Si MySQL   bibliothèque client tente de se connecter au   mauvaise prise locale, vous devez régler la   chemin correct en tant que configuration d'exécution   dans votre configuration PHP et le congé   le champ serveur vide.

Espérons que cela n'est pas totalement redondant. :)

Autres conseils

Je l'ai vu avant, où un utilisateur se connecte mysql via php et un autre ne fonctionne pas. Parfois, l'utilisateur travaille même de la ligne de commande, mais pas de php.

Il a toujours été ce que Emil est reffering deux. Un utilisateur de MySQL est vraiment paire utilisateur / hôte. de sorte que les megadots utilisateur @ localhost et l'utilisateur megadots @ mycoolhost sont répertoriés dans le tableau mysql.user comme deux enregistrements séparés.

Si vous pouvez vous connecter à partir de la ligne de commande exécuter cette requête.

SELECT user, host FROM mysql.user

vous devriez voir la liste complète des utilisateurs et thier hôtes.

si vous reconnaissez l'utilisateur phpMyAdmin qui fonctionne, regardez la colonne hôte qui est probablement l'hôte que vous voulez utiliser.

pour réinitialiser l'hôte exécuter ces requêtes (! Prenez soin de faire ce votre travail avec la table privilages pour l'ensemble de l'installation de MySQL)

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

flush privileges;

Si vous voyez un enregistrement avec le nom d'utilisateur et% comme l'hôte qui aura la priorité sur tout le reste, s'il y a plusieurs enregistrements pour l'utilisateur et% comme l'hôte pour l'un d'eux, il est possible que le nom d'utilisateur avec% comme l'hôte a le mot de passe erroné et peu importe comment vous manytimes réinitialiser le mot de passe de nom d'utilisateur @ localhost il est invalide car il sera comparé à nom d'utilisateur @% lors de la connexion.

Si vous utilisez Linux, utilisez le gestionnaire de paquets synaptic pour trouver et télécharger toutes les bibliothèques et les mods que PHP et MySQL ont besoin afin qu'ils puissent à la fois se connecter. Mon problème était que les scripts PHP en cours d'exécution seul travaillé sur le côté serveur, mais quand j'ai essayé d'utiliser des scripts PHP pour se connecter à MySQL il ne serait pas connecter je ne voir une page blanche ordinaire. Alors je remarqué que je n'ai pas les bibliothèques clientes MySQL que PHP utilise pour conect à MySQL. Je ne les avais bibliothèques de serveur MySQL. Une fois que j'ai installé les bibliothèques côté client et redémarré le serveur apache mes scripts PHP avaient pas de problème de connexion. Par défaut, PHP 5 ne vient pas installé avec les bibliothèques côté client MySQL.

Dans mon cas, il se je l'avais supprimé l'utilisateur qui a été utilisé pour créer la base de données que j'utilisais. Normalement, cela devrait donner le « définisseur spécifié par l'utilisateur n'existe pas » d'erreur, mais pour une raison quelconque, il a été tout simplement retourner l'accès plus général refusé à mon code PHP. Je ne sais pas pourquoi je pourrais encore vous connecter via la ligne de commande et d'autres interfaces. Pour corriger mon problème, je recréé l'utilisateur qui a été supprimé.

Ce sera soit une faute de frappe ou vous n'avez pas accordé des privilèges. Parfois, il peut être difficile à repérer de façon alarmante ces derniers.

Je suggère de ne pas utiliser phpmyadmin mais télécharger une copie de SQLYog (l'édition communautaire gratuite est grand) et essayez de vous connecter avec votre utilisateur via ce. Une fois que vous avez le problème diagnostiqué il y a retour à votre script copie / nom d'utilisateur / mot de passe de coller.

Soit dit en passant phpmyadmin est très bien, mais un programme tel que sqlyog est généralement plus pratique, donc la peine de vérifier de toute façon - je suis sûr que vous serez converti. Si sqlyog est pas tout à fait à votre goût, il y a plusieurs autres alternatives libres et commerciales.

  

et il a donné les privilèges appropriés pour la db

Comment? Quel accueil avez-vous utilisé pour l'utilisateur lors de l'accorder?

Voici comment cela se fait normalement:

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

(voir autre post) votre cas 'somehost' devrait probablement être 'localhost' ou '127.0.0.1'

Référence Syntaxe: http://dev.mysql.com/ doc / refman / 5.1 / fr / grant.html

Après avoir un problème similaire, je trouve que le remplacement de « 127.0.0.1 » par « localhost » a fait le tour (en dépit du fait que je suis capable de se connecter avec succès via le terminal en utilisant « localhost »).

J'ai eu le même problème, mais je pensais que ce que si vous laissez dans les comptes par défaut avec « % » (tout hôte), NON MOT DE PASSE alors vous ne pouvez pas vous connecter avec un mot de passe. Je ne suis pas sûr de ce que le problème est exactement, mais les enlever résolu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top