Errore MySQL / Apache nella query PHP MySQL

voti
23

Sto ottenendo il seguente errore:

Accesso negato per l'utente 'apache' @ 'localhost' (usando la 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.phpfile contiene il mio MySQL collegare le chiamate che stanno lavorando bene con i miei INSERT IGNORE query in un'altra porzione del software. Se io commento la $result = mysql_querylinea, poi si passa attraverso la dichiarazione d'altro. Quindi, è che la linea o il contenuto del caso.

Ho cercato in rete per eventuali soluzioni, e la maggior parte sembrano essere correlati a troppe connessioni MySQL o che l'utente sto accedendo a MySQL come non ha il permesso. Ho controllato entrambe le cose. Riesco ancora a esercitare le mie altre query in altre parti del software, e ho verificato che l'account disponga delle autorizzazioni corrette.

È pubblicato 05/08/2008 alle 22:45
fonte dall'utente
In altre lingue...                            


11 risposte

voti
10

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

Se si sta dicendo 'apache @ localhost' il nome utente non è sempre passata correttamente per la connessione MySQL. 'Apache' è di solito l'utente che esegue il processo httpd (almeno su sistemi basati su Redhat) e se non viene passato il nome utente durante la connessione MySQL utilizza chiunque sta chiamando per la connessione.

Se fate il diritto di connessione nello script, non in un file chiamato, si ottiene lo stesso errore?

Risposto il 06/08/2008 a 01:05
fonte dall'utente

voti
4

Modificare il include () per richiedere (). Se il file "connect.php" non può essere require () d, lo script fallirà con un errore fatale, mentre include () genera solo un avvertimento . Se il nome utente si sta passando a mysql_connect () non è "apache", un percorso non corretto allo script di connessione è il modo più comune per ottenere questo tipo di errore.

Risposto il 21/10/2008 a 19:30
fonte dall'utente

voti
2

DUDE la risposta è un grande DUH! che purtroppo mi c'è voluto un po 'per capire come bene. Probabilmente avete una funzione come collegamento database () e si utilizza le variabili da un file di inclusione per effettuare la connessione. $ Conn = mysql_connect ($ dbhost, $ dbuser, $ dbpass).

Ebbene dal momento che questo è all'interno di una funzione le variabili dal file includere devono essere passata alla funzione, altrimenti la funzione non sa cosa $ dbhost, $ dbuser e $ dbpass è. Un modo per risolvere questo problema è quello di rendere le variabili globali in modo che le funzioni di loro può prendere. Un'altra soluzione che non è molto sicuro sarebbe quello di scrivere si ospita, degli utenti e passare nella funzione mysql_connect.

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

Risposto il 02/03/2009 a 20:47
fonte dall'utente

voti
2

Ha lo script connect.php effettivamente fare il collegamento o lo fa solo definire una funzione è necessario chiamare per creare una connessione? L'errore che stai ricevendo è sintomatico di non avere una connessione precedentemente stabilita a tutti.

ETA: cambiarne anche l'includono ad un bisogno. Ho il sospetto che non è in realtà tra cui il file a tutti. Ma può non includere in silenzio.

Risposto il 21/10/2008 a 18:57
fonte dall'utente

voti
2

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

In caso contrario, sarà un problema di accesso pura. Fare un "select * from mysql.user" per vedere se l'utente apache è anche configurato in là. Inoltre, mi sento di raccomandare la creazione di un account specifico per la vostra applicazione anziché utilizzare apache, dal momento che qualsiasi altra applicazione si crea verrà eseguito come apache di default, e potrebbe ottenere l'accesso non autorizzato al db.

Basta guardare in alto "GRANT" nella documentazione @ dev.mysql.com per maggiori informazioni. Se si dispone di questiosn più specifiche per quanto riguarda db, basta modificare la tua domanda, e io dare un'occhiata.

Risposto il 21/10/2008 a 18:53
fonte dall'utente

voti
2

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

Se, tuttavia, l'utente apache non richiede una password, un doppio controllo dei permessi può essere una buona idea (che lei ha citato già controllato). Può comunque essere utile per provare l'esecuzione di qualcosa di simile ad un prompt di MySQL:

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

Che la sintassi deve essere corretta.

Oltre a questo, io sono proprio come perplesso come sei.

Risposto il 05/08/2008 a 22:56
fonte dall'utente

voti
2

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 si ottiene ancora un errore se si copia e incolla una di quelle Inserti in questa pagina, sto cercando di vedere se è locale alla pagina o quella linea attuale.

Inoltre, si può inviare una copia delle chiamate di connessione (meno le password), a meno che gli inserti usano esattamente la stessa sintassi di questo esempio.

Risposto il 05/08/2008 a 22:52
fonte dall'utente

voti
1

Vi siete ricordati di fare:

flush privileges;

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

Risposto il 19/09/2013 a 11:46
fonte dall'utente

voti
1

Si può fare in uno dei seguenti:

  • Aggiungere l'utente "apache" e messa a punto dei suoi privilegi da phpMyAdmin o utilizzando mysql su una conchiglia
  • Dillo php per l'esecuzione mysql_connectcome un altro utente, qualcuno che ha già i privilegi necessari (ma forse non root), cercano mysql.default_user nel file php.ini.
Risposto il 21/06/2009 a 22:06
fonte dall'utente

voti
1

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

Se è così, non si ottiene ancora un errore se si copia e incolla una di quelle Inserti in questa> pagina, sto cercando di vedere se è locale alla pagina o quella linea attuale.

Inoltre, si può inviare una copia delle chiamate di connessione (meno le password), a meno che gli inserti> utilizzare esattamente la stessa sintassi di questo esempio.

Ecco ciò che è nel file connection.php. Ho collegato il file tramite un include nello stesso modo in cui eseguo l'INSERT IGNORE query in altre parti del codice.

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

Cercherò INSERT IGNORE lavorare query in questo settore per verificare che fuori.

Per quanto riguarda gli altri postano la password di accesso. L'ho fatto, come indicato nel mio primo post, controllare le autorizzazioni. Ho usato phpMyAdmin per verificare che le autorizzazioni per l'account utente che stavo usando erano corrette. E se è importante a tutti, apache @ localhost non è il nome dell'account utente che uso per entrare nel database. Non ho alcun account utente con il nome apache in loro a tutti per quella materia.

Risposto il 05/08/2008 a 23:40
fonte dall'utente

voti
1

Se davvero siete in grado di inserire utilizzando le stesse chiamate di connessione, il problema molto probabilmente risiede nella utente "apache" non avere le autorizzazioni SELECT sul database. Se si dispone di phpMyAdmin installato è possibile guardare le autorizzazioni per l'utente nel riquadro privilegi. phpMyAdmin rende anche molto facile da modificare le autorizzazioni.

Se avete solo l'accesso alla linea di comando, è possibile controllare le autorizzazioni dal database mysql.

Avrete probabilmente bisogno di fare qualcosa di simile:

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

Risposto il 05/08/2008 a 23:02
fonte dall'utente

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