Domanda

Non riesco a connettersi a MySQL con uno script PHP, anche se posso collegarmi benissimo con phpMyAdmin. Ho creato un utente con una password, e le diede il privilegi corretti per il db, ma ogni volta che si connette muore dicendo accesso negato. Sto usando XAMPP su una scatola di Windows XP. I firewall sono tutti disabili, e ho controllato il nome utente password nad siano corrette. Ecco il codice:

$conn=mysql_connect('localhost','westbrookc16','megadots') || die (mysql_error());

Non nomi utente devono essere in un formato specifico o qualcosa del genere?

È stato utile?

Soluzione

Ho la sensazione che il problema qui è il padrone di casa si concesso a, anche se non è davvero più che un'ipotesi. Se si concede l'accesso myuser@'127.0.0.1' o l'indirizzo IP dei server vero e proprio, non sarà consentito di connettersi utilizzando localhost come ospite. Ciò è dovuto al fatto che quando "localhost" è specificato come ospite, php assumerà che si desidera utilizzare un socket unix al posto del socket di rete, e in quel contesto 127.0.0.1 non è lo stesso di localhost.

A decorrere dall'entrata manuale mysql_connect () :

  

Nota: Ogni volta che si specifica "localhost"   o "localhost: port", come server, la   libreria client MySQL avrà la precedenza   questo e provare a connettersi a un locale   Presa (named pipe su Windows). Se tu   consiglia di utilizzare il protocollo TCP / IP, usare "127.0.0.1"   invece di "localhost". Se il MySQL   libreria client tenta di connettersi al   sbagliato socket locale, è necessario impostare la   percorso corretto come configurazione runtime   nella configurazione di PHP e congedo   campo Server vuoto.

Spero che questo non è del tutto superfluo. :)

Altri suggerimenti

Ho visto questo prima, dove un utente mysql accede tramite php e un altro non lo fa. A volte l'utente funziona anche da linea di comando, ma non da PHP.

E 'sempre stato quello Emil è reffering due. Un utente mysql è davvero coppia utente / host. così i megadots user @ localhost e l'utente megadots @ mycoolhost sono elencati nella tabella mysql.user come due dischi separati.

Se è possibile accedere dalla riga di comando eseguire questa query.

SELECT user, host FROM mysql.user

si dovrebbe vedere l'elenco completo degli utenti e il loro host.

se si riconosce l'utente phpMyAdmin che sta lavorando, osservare la colonna host che è probabilmente l'host che si desidera utilizzare.

per ripristinare l'host eseguire queste query (! Fare attenzione a fare questo il vostro lavoro con il tavolo privilages per l'intera installazione mysql)

update mysql.user set host = 'hostname' 
where user = 'username' and host = 'oldhostname';

flush privileges;

Se si vede un record con il nome utente e% come l'ospite che avrà la priorità su tutto il resto, se ci sono più record per l'utente e% come l'ospite per uno di loro, è possibile che il nome utente con% l'host ha la password sbagliata e non importa quanto manytimes di reimpostare la password username @ di localhost è invalido perché sarà confrontato con username @% su login.

Se si sta usando Linux utilizzare il gestore di pacchetti Synaptic per trovare e scaricare tutte le librerie e mods che PHP e MySQL hanno bisogno in modo che possano entrambi connettersi. Il mio problema era che gli script PHP che eseguono solo lavorato sul lato server, ma quando ho provato ad utilizzare script PHP per la connessione a MySQL non sarebbe collegare vorrei solo vedere una pagina bianca normale. Poi ho notato non ho avuto le librerie client MySQL PHP che utilizza per conect a MySQL. Ho avuto solo le librerie server MySQL. Una volta che ho installato le librerie lato client e riavviato il server apache miei script PHP ha avuto alcun problema di connessione. Di default PHP 5 non viene installata con le librerie lato client di MySQL.

Nel mio caso, si è scoperto che avevo cancellato l'utente che è stato utilizzato per creare il database che stavo usando. Normalmente questo dovrebbe dare il 'definitore utente specificato non esiste' errore, ma per qualche ragione è stato semplicemente tornare l'accesso più generale negato al mio codice PHP. Io non sono sicuro perché ho potuto ancora effettuare il login attraverso la riga di comando e altre interfacce. Per risolvere il mio problema ho ricreato l'utente che è stato eliminato.

Questo sarà essere un errore di battitura o che non hanno concesso privilegi. A volte può essere difficile da individuare in modo allarmante questi.

Suggerisco di non utilizzare phpMyAdmin, ma scaricare una copia di SQLyog (l'edizione comunità libera è grande) e cercare di effettuare il login con l'utente tramite tale. Una volta che avete il problema diagnosticato ci copia / incolla username / password di nuovo al vostro script.

Per inciso phpMyAdmin va bene, ma un programma come sqlyog è generalmente più conveniente, così la pena di verificare in ogni caso - sono sicuro che sarai convertito. Se sqlyog non è abbastanza per il vostro gusto ci sono diverse altre alternative gratuite e commerciali.

  

e ha dato i privilegi corretti per il db

Come? Che accoglienza hai usato per l'utente quando ha concessi?

Ecco come avviene normalmente:

GRANT ALL ON mydb.* TO 'someuser'@'somehost' identified by 'password';
FLUSH privileges;

nel tuo caso 'somehost' dovrebbe probabilmente essere 'localhost' o '127.0.0.1' (vedi altro post)

di riferimento Sintassi: http://dev.mysql.com/ doc / refman / 5.1 / it / grant.html

Dopo aver avuto un problema simile ho trovato che la sostituzione di '127.0.0.1' con 'localhost' ha fatto il trucco (nonostante il fatto che sono stato in grado di connettersi con successo attraverso il terminale utilizzando 'localhost').

Ho avuto lo stesso problema, ma poi ho capito che se si lascia nei conti di default con '%' (qualsiasi host), NO PASSWORD poi basta solo non riesce a connettersi con una password. Non sono sicuro quale sia il problema esattamente, ma la loro rimozione risolto esso.

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