Domanda

Ricevo il seguente errore:

Accesso negato per l'utente 'apache'@'localhost' (using password:NO)

Quando si utilizza il seguente codice:

<?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.";
}
?>

Il connect.php il file contiene il mio MySQL collegare le chiamate che stanno lavorando bene con il mio INSERT query in un'altra parte del software.Se io commento la $result = mysql_query linea, poi si passa attraverso l'istruzione else.Così, è la linea o il contenuto in se.

Ho cercato in rete in cerca di soluzioni, e la maggior parte sembrano essere correlati a troppe connessioni MySQL o che l'utente io sono la registrazione in MySQL come utente non ha l'autorizzazione.Ho controllato entrambi.Ho ancora in grado di svolgere le mie altre query altrove nel software, e ho verificato che l'account che dispone di autorizzazioni corrette.

È stato utile?

Soluzione

E se è importante a tutti, apache@localhost non è il nome dell'account utente che uso per accedere al database.Non ho alcun account utente con il nome di apache in loro a tutti per quella materia.

Se si tratta di dire 'apache@localhost' il nome utente non viene passato correttamente per la connessione a MySQL.'apache' è normalmente l'utente che esegue il processo httpd (almeno su Redhat-based systems) e se nessun nome è passato durante la connessione a MySQL usa chi sta chiamando per la connessione.

Se si esegue il collegamento a destra dello script, non in un file chiamato, si ottiene lo stesso errore?

Altri suggerimenti

Modificare la funzione include() e require(). Se l' "connect.php" il file non può essere require()d, lo script non funzionerà con un errore irreversibile, mentre include() genera solo un avviso.Se il nome utente che si sta passando a mysql_connect() non è "apache", un percorso non corretto per la connessione dello script è il modo più comune per ottenere questo tipo di errore.

Non dimenticare di controllare il database log di errore.Si dovrebbe essere in grado di vedere se si sta ancora colpendo il DB.Se non, si dovrebbe verificare le regole del firewall di scatola.Su linux, è possibile eseguire il comando iptables-L per ottenere il firewall elenco di regole.

Altrimenti sarà un puro problema di accesso.Fare un "select * from mysql.utente" per vedere se l'utente apache è ancora allestito.Inoltre, vi consiglio di creare un account specifico per la vostra applicazione, anziché utilizzare apache, dal momento che qualsiasi altra app che si crea lo esegui come apache di default, e potrebbe ottenere l'accesso non autorizzato al tuo db.

Basta cercare "STUDIO" nella documentazione @ dev.mysql.com per ottenere ulteriori informazioni.Se si dispone di più specifico questiosn per quanto riguarda db, basta modificare la tua domanda, e darò uno sguardo.

Il connect.php script in realtà la connessione è o non è sufficiente definire una funzione è necessario chiamare a creare una connessione?L'errore che stai ricevendo è sintomatico di non avere un collegamento già stabilito a tutti.

ETA:Anche cambiare la includono a un bisogno.Ho il sospetto che in realtà non compreso il file.Ma comprendono può fallire in silenzio.

Tizio la risposta è un grande DUH!il che, purtroppo, mi ci è voluto un po ' per capire come bene.Probabilmente hanno una funzione come dbconnect() e si utilizzano le variabili da un file di inclusione per effettuare la connessione.$conn = mysql_connect($dbhost, $dbuser, $dbpass).

Beh, dal momento che questo è all'interno di una funzione le variabili dal file di inclusione devono essere passati alla funzione, altrimenti la funzione non sanno cosa sia $dbhost, $dbuser e $dbpass è.Un modo per risolvere questo problema è quello di rendere queste variabili globale, quindi le funzioni li pick up.Un'altra soluzione che non è molto sicura sarebbe quella di scrivere host, user e pass in funzione mysql_connect.

Spero che questo aiuta, ma ho avuto lo stesso problema.

Se, infatti, sono in grado di inserire utilizzando la stessa connessione chiamate, il problema probabilmente sta nel utente "apache" non avere le autorizzazioni SELECT sul database.Se avete installato phpMyAdmin è possibile guardare le autorizzazioni per l'utente i Privilegi riquadro.phpMyAdmin rende anche molto facile da modificare le autorizzazioni.

Solo se si ha accesso alla riga di comando, è possibile controllare le autorizzazioni per il database mysql.

Avrete probabilmente bisogno di fare qualcosa di simile:

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

Vi siete ricordati di fare:

flush privileges;

Se l'utente non è impostato poi si darà il 'apache'@'localhost' errore.

Solo per controllare, se si utilizza solo questa parte si ottiene un errore?

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

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

Se è così, non è ancora ottenere un errore se si copia e incolla una di quelle Inserti in questa pagina, sto cercando di vedere se è locale alla pagina o che la linea vera e propria.

Inoltre, è possibile inviare una copia della connessione chiamate (meno di una password, a meno che la inserisce utilizzare esattamente la stessa sintassi di questo esempio.

Solo per controllare, se si utilizza solo questa parte si ottiene un errore?

Se è così, non è ancora ottenere un errore se si copia e incolla una di quelle Inserti in questa >pagina, sto cercando di vedere se è locale alla pagina o che la linea vera e propria.

Inoltre, è possibile inviare una copia della connessione chiamate (meno di una password, a meno che gli inserti >utilizzare esattamente la stessa sintassi di questo esempio.

Qui è che cosa è in connection.php file.Ho legato il file attraverso un'includere nello stesso modo in cui eseguire la query di INSERIMENTO altrove nel codice.

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

Cerco lavoro query di INSERIMENTO in questo settore per verificare che fuori.

Come per gli altri la pubblicazione sulla password di accesso.Ho fatto, come detto nel mio primo intervento, verificare le autorizzazioni.Ho usato phpMyAdmin per verificare che le autorizzazioni per l'account utente che usavo erano corrette.E se è importante a tutti, apache@localhost non è il nome dell'account utente che uso per accedere al database.Non ho alcun account utente con il nome di apache in loro a tutti per quella materia.

È possibile effettuare una delle seguenti operazioni:

  • Aggiungere l'utente "apache" e di installazione i suoi privilegi da phpmyadmin o l'utilizzo di mysql su una conchiglia,
  • Dire a php per eseguire mysql_connect come un altro utente, qualcuno che già ha i privilegi necessari (ma forse non root), e cercare di mysql.default_user in php.file ini.

Il apache utente di richiedere una password per la connessione al database?Se è così, allora il fatto che si dice "utilizzando la password:NO" mi porterebbe a credere che il codice sta tentando la connessione senza password.

Se, tuttavia, l'utente apache non richiede una password, un doppio controllo delle autorizzazioni possono essere una buona idea (che hai detto che ti è già selezionata).Si può ancora essere utile provare a eseguire qualcosa di simile a un prompt di mysql:

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

Che sintassi dovrebbe essere corretto.

Oltre a questo, sono altrettanto perplesso come te.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top