Erreur MySQL / Apache MySQL PHP requête

voix
23

Je reçois l'erreur suivante:

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

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 connect.phpfichier contient mon MySQL connecter les appels qui fonctionnent très bien avec mes INSERT IGNORE requêtes dans une autre partie du logiciel. Si je commente la $result = mysql_queryligne, puis il passe par l'instruction else. Ainsi, il est cette ligne ou le contenu dans le cas.

J'ai cherché sur le net pour toutes les solutions, et la plupart semblent être liés à un trop grand nombre de connexions MySQL ou que l'utilisateur je vous connecter à MySQL comme ne pas l'autorisation. J'ai vérifié à la fois. Je peux encore faire mes autres requêtes ailleurs dans le logiciel, et je l'ai vérifié que le compte dispose des autorisations appropriées.

Créé 05/08/2008 à 22:45
source utilisateur
Dans d'autres langues...                            


11 réponses

voix
10

Et si elle importe du tout, apache @ localhost est pas le nom du compte utilisateur que j'utilise pour entrer dans la base de données. Je n'ai pas les comptes utilisateur avec le nom apache en eux tout pour cette question.

Si elle dit « apache @ localhost » le nom d'utilisateur ne reçoit pas transmis correctement la connexion MySQL. « Apache » est habituellement l'utilisateur qui exécute le processus httpd (au moins sur les systèmes RedHat) et si aucun nom d'utilisateur passe lors de la connexion MySQL utilise quiconque appelle à la connexion.

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

Créé 06/08/2008 à 01:05
source utilisateur

voix
4

Changer include () pour exiger (). Si le fichier « connect.php » ne peut pas être require () d, le script échouera avec une erreur fatale, alors que include () ne génère un avertissement . Si le nom d' utilisateur vous passez à mysql_connect () n'est pas « apache », un chemin d' accès incorrect au script de connexion est le moyen le plus courant pour obtenir ce type d'erreur.

Créé 21/10/2008 à 19:30
source utilisateur

voix
2

Mec, la réponse est un grand DUH! qui, malheureusement, il m'a fallu un certain temps pour comprendre aussi bien. Vous avez probablement une fonction comme dbconnect () et que vous utilisez des variables dans un fichier Include pour établir la connexion. $ Conn = mysql_connect ($ dbhost, $ dbuser $ dbpass).

Eh bien, puisque cela est en fonction des variables du fichier include doivent être transmis à la fonction ou bien la fonction ne saura pas ce que $ dbhost, dbuser $ et dbpass $ est. Une façon de résoudre ce problème est de rendre ces variables globales afin que vos fonctions peuvent les ramasser. Une autre solution qui ne serait très sûr d'écrire sur vous hôte, utilisateur et passer dans la fonction mysql_connect.

Espérons que cela aide, mais j'ai eu le même problème.

Créé 02/03/2009 à 20:47
source utilisateur

voix
2

Le script connect.php réellement faire la connexion ou définit-il juste une fonction, vous devez appeler pour créer une connexion? L'erreur que vous obtenez est symptomatique de ne pas avoir une connexion précédemment établie du tout.

ETA: modifier également l'inclure à un besoin. Je soupçonne que ce n'est pas compris en fait le fichier du tout. Mais inclure peut échouer en silence.

Créé 21/10/2008 à 18:57
source utilisateur

voix
2

Ne pas oublier de vérifier vos journaux d'erreurs de base de données. Vous devriez être en mesure de voir si vous êtes même frapper la DB. Si vous n'êtes pas, vous devriez vérifier vos règles de pare-feu sur la boîte. Sur une boîte de Linux, vous pouvez exécuter iptables -L pour obtenir les règles de liste de pare-feu.

Sinon, ce sera un problème d'accès pur. Faites un « select * from mysql.user » pour voir si l'utilisateur apache est même mis en place là-dedans. En outre, je recommande la création d'un compte spécialement pour votre application plutôt que d'utiliser apache, car toute autre application que vous créez fonctionnera comme apache par défaut, et pourrait obtenir un accès non autorisé à votre base de données.

Il suffit de regarder « GRANT » dans la documentation @ dev.mysql.com pour obtenir plus d'informations. Si vous avez questiosn plus spécifique en ce qui concerne db, il suffit d'éditer votre question, et je vais jeter un coup d'oeil.

Créé 21/10/2008 à 18:53
source utilisateur

voix
2

Est-ce que l'utilisateur apache nécessite un mot de passe pour se connecter à la base de données? Si oui, alors le fait qu'il dit « en utilisant le mot de passe: NON » me conduire à croire que le code tente de se connecter sans mot de passe.

Toutefois, si l'utilisateur apache ne nécessite pas un mot de passe, une double vérification des autorisations peut être une bonne idée (que vous vous avez mentionné déjà vérifié). Il peut encore être avantageux d'essayer d'exécuter quelque chose comme ceci à l'invite mysql:

GRANT ALL PRIVILEGES ON `*databasename*`.* to 'apache'@'localhost';

Cette syntaxe doit être correcte.

En dehors de cela, je suis tout aussi perplexes que vous êtes.

Créé 05/08/2008 à 22:56
source utilisateur

voix
2

Juste pour vérifier, si vous utilisez juste cette partie vous obtenez une erreur?

<?php
include("../includes/connect.php");

$query = "SELECT * from story";
$result = mysql_query($query) or die(mysql_error());

Si oui, vous obtenez toujours une erreur si vous copiez et collez un de ces insertions dans cette page, je suis en train de voir si elle est locale à la page ou cette ligne réelle.

En outre, vous pouvez afficher une copie des appels de connexion (moins les mots de passe), à ​​moins que les inserts utilisent exactement la même syntaxe que cet exemple.

Créé 05/08/2008 à 22:52
source utilisateur

voix
1

Avez-vous pensé à faire:

flush privileges;

Si l'utilisateur n'est pas configuré il donnera l'erreur « apache » @ « localhost ».

Créé 19/09/2013 à 11:46
source utilisateur

voix
1

Vous pouvez faire une des opérations suivantes:

  • Ajouter l'utilisateur « apache » et configurer ses privilèges de phpmyadmin ou en utilisant MySQL sur une coquille
  • Php dire de fonctionner mysql_connectcomme un autre utilisateur, quelqu'un qui a déjà les privilèges nécessaires (mais peut - être pas root), recherchez mysql.default_user dans votre fichier php.ini.
Créé 21/06/2009 à 22:06
source utilisateur

voix
1

Juste pour vérifier, si vous utilisez seulement cette partie vous obtenez une erreur?

Si oui, vous obtenez toujours une erreur si vous copiez et collez un de ces insertions dans ce> page, je suis en train de voir si elle est locale à la page ou cette ligne réelle.

En outre, vous pouvez afficher une copie des appels de connexion (moins les mots de passe), à ​​moins que les inserts> utiliser exactement la même syntaxe que cet exemple.

Voici ce qui est dans le fichier connection.php. Je lié au fichier par un include de la même façon que là où j'exécuter les requêtes INSERT IGNORE ailleurs dans le code.

$conn = mysql_connect("localhost", ******, ******) or die("Could not connect");
mysql_select_db("adbay_com_-_cms") or die("Could not select database");

Je vais essayer INSERT IGNORE requête de travail dans ce domaine pour vérifier.

Quant aux autres affichant sur l'accès par mot de passe. Je l'ai fait, comme indiqué dans mon premier poste, vérifier les autorisations. Je phpMyAdmin pour vérifier que les autorisations pour le compte de l'utilisateur que j'utilisais étaient corrects. Et si elle importe du tout, apache @ localhost est pas le nom du compte utilisateur que j'utilise pour entrer dans la base de données. Je n'ai pas les comptes utilisateur avec le nom apache en eux tout pour cette question.

Créé 05/08/2008 à 23:40
source utilisateur

voix
1

En effet, si vous êtes en mesure d'insérer en utilisant les mêmes appels de connexion, votre problème est plus probable que l'utilisateur « apache » ne pas avoir les permissions SELECT sur la base de données. Si vous avez phpMyAdmin installé, vous pouvez regarder les autorisations pour l'utilisateur dans le volet Privilèges. phpMyAdmin rend également très facile de modifier les autorisations.

Si vous avez seulement accès à la ligne de commande, vous pouvez vérifier les autorisations de la base de données MySQL.

Vous aurez probablement besoin de faire quelque chose comme:

GRANT SELECT ON myDatabase.myTable TO 'apache' @ 'localhost';

Créé 05/08/2008 à 23:02
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more