Mysql
 sql >> Base de données >  >> RDS >> Mysql

Obtention d'une erreur d'accès refusé lors de l'exécution de mysql_query en php

Mise à jour finale :

J'ai ouvert une session de chat avec Aditii et nous y avons fait du débogage.

En fin de compte, le problème était qu'elle avait mis à niveau un serveur sur lequel les balises courtes étaient activées vers un autre qui ne l'était pas. En conséquence, tout son code qui était entouré de balises courtes n'était pas exécuté, y compris son fichier de configuration.

L'erreur dans la question était due au mysql_connect() fonction non exécutée car ce fichier entier n'était pas exécuté. Un mysql_query() l'appel qui reposait sur cette connexion a échoué à cause de cela.

Après avoir corrigé ses balises courtes pour utiliser le <?php complet tag, ce fichier exécuté. Comme indiqué dans ma réponse originale à cette question, les guillemets simples autour des variables sont passés à mysql_connect() a fini par causer des problèmes. Après avoir conseillé de supprimer ces guillemets simples, la connexion a réussi et le problème a été résolu.

La session de débogage complète, pour toutes les parties intéressées, peut être trouvée ici .

Première mise à jour :

Après avoir regardé cela d'un peu plus près, il y a deux éléments qui ne correspondent pas à ma réponse d'origine (que j'ai gardée au bas de cette réponse, car elle contient encore de bonnes informations).

Tout d'abord, l'erreur est déclenchée par mysql_query() pas mysql_connect() . C'est probablement parce qu'il n'y a pas de gestion des erreurs autour de la connexion, donc l'erreur n'est remarquée que plus tard. Essayez d'ajouter une gestion des erreurs autour de la connexion :

if (!($con = mysql_connect('$localhost','$username','$password'))) {
  echo mysql_error();
}

if (!mysql_select_db('$dbname',$con)) {
  echo mysql_error();
}

Dans ce qui précède, les erreurs seront affichées dès que l'erreur se produit.

La deuxième chose que je vois est que vous vous connectez à localhost avec l'ODBC utilisateur. Cela n'a aucun sens si l'erreur est déclenchée par le code de connexion que vous avez indiqué ci-dessus. Soit vous vous connectez avec un utilisateur appelé $username si votre problème est le problème des guillemets simples que j'explique ci-dessous, ou root si ce n'est pas le cas.

Il semble que PHP essaie de se connecter avec les informations d'identification par défaut pour votre configuration PHP (trouvé dans votre php.ini fichier), plutôt que les informations d'identification que vous avez fournies. Cela m'amène à croire que les lignes que vous nous montrez ne sont pas réellement les lignes en cours d'exécution. Êtes-vous sûr de ne pas essayer de vous connecter ailleurs dans votre code ? Si tel est le cas, je soupçonne que votre erreur réside dans cette partie du code.

Il est également possible (je devrais vérifier) ​​que lorsque vous essayez d'exécuter mysql_query() contre une connexion nulle, peut-être que PHP essaie de créer une connexion pour vous. Je ne compterais pas là-dessus cependant.

Je vous suggère d'essayer d'exécuter le code mis à jour que j'ai fourni ci-dessus, qui utilise le mysql_error() fonction pour afficher les erreurs au fur et à mesure qu'elles se produisent. Vous pouvez même ajouter un echo vos propres déclarations dans ces blocs, pour un bon débogage printf à l'ancienne.

Réponse originale :

Le problème est que vous enfermez vos variables dans des guillemets simples. Si vous les entourez de guillemets simples, PHP n'évalue pas la variable à la valeur. Par exemple, plutôt que de passer root comme deuxième argument, vous passez $username . En fin de compte, vous essayez de vous connecter à un serveur appelé $localhost avec un utilisateur appelé $username avec un mot de passe $password .

Jetez un œil à la page de documentation PHP pour les chaînes . Cela explique ceci :

Si vous souhaitez utiliser des variables à l'intérieur d'une chaîne, vous devez utiliser double citations, pas unique. Dans ce cas, cependant, vous n'avez même pas besoin de mettre ces variables entre guillemets, car leurs valeurs sont déjà cordes. Vous pouvez simplement passer la variable toute seule. Essayez ceci :

$con=mysql_connect($localhost, $username, $password);
mysql_select_db($dbname, $con);