Mysql
 sql >> Database >  >> RDS >> Mysql

Errore di accesso negato durante l'esecuzione di mysql_query in php

Aggiornamento finale:

Ho aperto una sessione di chat con Aditii e lì abbiamo fatto un po' di debug.

A quanto pare, il problema era che aveva eseguito l'aggiornamento da un server con tag brevi abilitati a uno che non lo faceva. Di conseguenza, tutto il suo codice racchiuso in tag brevi non veniva eseguito e questo includeva il suo file di configurazione.

L'errore nella domanda era dovuto a mysql_connect() la funzione non viene eseguita perché l'intero file non viene eseguito. Un mysql_query() chiamata che si basava su quella connessione non è riuscita a causa di ciò.

Dopo aver corretto i suoi tag brevi per utilizzare il <?php completo tag, quel file è stato eseguito. Come discusso nella mia risposta originale a questa domanda, le virgolette singole attorno alle variabili passate a mysql_connect() ha finito per causare problemi. Dopo aver consigliato di rimuovere quelle virgolette singole, la connessione è riuscita e il problema è stato risolto.

L'intera sessione di debug, per eventuali parti interessate, può essere trovata qui .

Primo aggiornamento:

Dopo aver esaminato questo aspetto un po' più da vicino, ci sono due pezzi che non si adattano alla mia risposta originale (che ho tenuto in fondo a questa risposta, dal momento che contiene ancora alcune buone informazioni).

Innanzitutto, l'errore viene attivato da mysql_query() non mysql_connect() . Ciò è probabilmente dovuto al fatto che non vi è alcuna gestione degli errori che circonda la connessione, quindi l'errore non viene notato fino a tardi. Prova ad aggiungere un po' di gestione degli errori intorno alla connessione:

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

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

In quanto sopra, gli errori verranno visualizzati non appena si verifica l'errore.

La seconda cosa che vedo è che ti stai connettendo a localhost con il ODBC utente. Questo non ha senso se l'errore viene attivato dal codice di connessione che hai mostrato sopra. O accedi con un utente chiamato $username se il tuo problema è il problema delle virgolette singole che spiego di seguito, o root se non lo sei.

Sembra che PHP stia tentando di connettersi con le credenziali predefinite per la tua configurazione PHP (trovate nel tuo php.ini file), anziché le credenziali che hai fornito. Questo mi porta a credere che le battute che ci stai mostrando non siano in realtà le battute che vengono eseguite. Sei sicuro di non provare a connetterti altrove nel tuo codice? Se lo sei, sospetto che il tuo errore risieda in quella parte del codice.

È anche possibile (dovrei controllare) che quando stai tentando di eseguire mysql_query() contro una connessione nulla, forse PHP sta cercando di creare una connessione per te. Non ci conterei però.

Ti suggerisco di provare a eseguire il codice aggiornato che ho fornito sopra, che utilizza mysql_error() funzione per mostrare gli errori mentre si verificano. Potresti anche aggiungere un po' di echo le tue affermazioni in quei blocchi, per un buon debug vecchio stile printf.

Risposta originale:

Il problema è che stai racchiudendo le tue variabili tra virgolette singole. Se li racchiudi tra virgolette singole, PHP non valuta la variabile in base al valore. Ad esempio, invece di passare root come secondo argomento, stai passando $username . Alla fine, stai cercando di accedere a un server chiamato $localhost con un utente chiamato $username con una password di $password .

Dai un'occhiata alla pagina della documentazione PHP per le stringhe . Spiega questo:

Se vuoi usare variabili all'interno di una stringa, devi usare double virgolette, non singole. In questo caso, tuttavia, non è nemmeno necessario racchiudere queste variabili tra virgolette, perché i loro valori sono già stringhe. Puoi semplicemente passare la variabile da sola. Prova questo:

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