Erreur MySQL/Apache dans la requête PHP MySQL

J'obtiens l'erreur suivante :

Accès refusé pour l'utilisateur 'apache'@'localhost' (en utilisant le mot de passe : NON)

Lorsque vous utilisez le code suivant :

<?php

include('../includes/connect.php');

$query = 'SELECT * from story';

$result = mysql_query($query) or die(mysql_error());

echo '<h1>Delete Story</h1>';

if (mysql_num_rows($result) > 0) {
    while($row = mysql_fetch_row($result)){
          echo '<b>'.$row[1].'</b><span align='right'><a href='../process/delete_story.php?id='.$row[0].''>Delete</a></span>';
      echo '<br /><i>'.$row[2].'</i>';
    }
}
else {
   echo 'No stories available.';
}
?>

Le fichier connect.php contient mes appels de connexion MySQL qui fonctionnent correctement avec mes requêtes INSERT dans une autre partie du logiciel. Si je commente la ligne $result = mysql_query, elle passe à l'instruction else. Donc, c'est cette ligne ou le contenu du if.

J'ai cherché sur le net des solutions, et la plupart semblent être liées à un trop grand nombre de connexions MySQL ou au fait que l'utilisateur avec lequel je me connecte à MySQL n'a pas l'autorisation. J'ai vérifié les deux. Je peux toujours effectuer mes autres requêtes ailleurs dans le logiciel et j'ai vérifié que le compte dispose des autorisations appropriées.

请先 登录 后评论

3 réponses

dragonmantank

Et si cela compte, apache@localhost n'est pas le nom du compte utilisateur que j'utilise pour accéder à la base de données. Je n'ai d'ailleurs aucun compte d'utilisateur avec le nom apache.

S'il indique 'apache@localhost', le nom d'utilisateur n'est pas correctement transmis à la connexion MySQL. 'apache' est normalement l'utilisateur qui exécute le processus httpd (au moins sur les systèmes basés sur Redhat) et si aucun nom d'utilisateur n'est transmis lors de la connexion, MySQL utilise celui qui appelle pour la connexion.

Si vous faites la connexion directement dans votre script, pas dans un fichier appelé, obtenez-vous la même erreur ?

请先 登录 后评论
KernelM

Le script connect.php établit-il réellement la connexion ou définit-il simplement une fonction que vous devez appeler pour créer une connexion ? L'erreur que vous obtenez est symptomatique de l'absence de connexion précédemment établie.

ETA : Remplacez également l'inclusion par une exigence. Je soupçonne qu'il n'inclut pas du tout le fichier. Mais l'inclusion peut échouer silencieusement.

请先 登录 后评论
Community

Mec, la réponse est un gros DUH ! ce qui malheureusement m'a pris du temps à comprendre aussi. Vous avez probablement une fonction comme dbconnect() et vous utilisez des variables d'un fichier d'inclusion pour établir la connexion. $conn = mysql_connect($dbhost, $dbuser, $dbpass).

Eh bien, puisque c'est à l'intérieur d'une fonction, les variables du fichier d'inclusion doivent être transmises à la fonction, sinon la fonction ne saura pas ce que sont $dbhost, $dbuser et $dbpass. Une façon de résoudre ce problème consiste à rendre ces variables globales afin que vos fonctions puissent les récupérer. Une autre solution qui n'est pas très sécurisée serait d'écrire votre host, user et pass dans la fonction mysql_connect.

J'espère que cela vous aidera, mais j'ai eu le même problème.

请先 登录 后评论