2009-03-20 11 views
7

Non riesco a connettermi a mysql con uno script php, anche se riesco a connettermi bene con phpmyadmin. Ho creato un utente con una password e gli ho dato i privilegi appropriati per il db, ma ogni volta che si connette muore dicendo accesso negato. Sto usando xampp su una finestra di Windows XP. I firewall sono tutti disabilitati e ho controllato che il nome utente e la password siano corretti. Ecco il codice:non riesco a connettermi a mysql con php

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

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

+0

Come hai concesso il privilegio? Il problema in questo caso non è il codice php, ma sul lato mysql. L'istruzione connect è corretta. –

risposta

13

Ho la sensazione che il problema qui sia l'host a cui l'hai concesso, anche se in realtà non è più di un'ipotesi plausibile. Se si concede l'accesso a [email protected]'127.0.0.1 'o l'indirizzo IP effettivo del server, non sarà possibile connettersi utilizzando localhost come host. Ciò è dovuto al fatto che quando "localhost" è specificato come host, php assumerà che si voglia utilizzare un socket unix invece di socket di rete, e in quel contesto 127.0.0.1 non è lo stesso di localhost.

Dal inserimento manuale per mysql_connect():

Nota: Ogni volta che si specifica "localhost" o "localhost: port", come server, la libreria client MySQL avrà la precedenza questo e cercare di connettersi a un socket locale (named pipe su Windows). Se si utilizza per utilizzare TCP/IP, utilizzare "127.0.0.1" anziché "localhost". Se la libreria client MySQL tenta di connettersi al socket locale errato , è necessario impostare il percorso corretto come configurazione di runtime nella configurazione PHP e lasciare il campo server vuoto .

Spero che questo non sia totalmente ridondante.:)

0

e lo diede i privilegi appropriati per il db

Come? Quale host hai utilizzato per l'utente quando lo hai concesso?

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 altri post)

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

0

Questo sarà un errore di battitura o non hai concesso i privilegi. A volte può essere allarmante difficile individuarli.

Suggerisco di non utilizzare phpmyadmin ma di scaricare una copia di SQLYOG (l'edizione gratuita della community è ottima) e provare ad accedere con il proprio utente tramite quello. Una volta che il problema è stato diagnosticato, copia/incolla il nome utente/la password nuovamente nel tuo script.

Incidentalmente phpmyadmin va bene, ma un programma come sqlyog è generalmente più conveniente, quindi vale la pena di provarlo comunque - Sono sicuro che verrai convertito. Se sqlyog non è del tutto a vostro gusto ci sono molte altre alternative gratuite e commerciali.

5

Ho visto prima, dove un utente mysql accede tramite php e un altro no. A volte l'utente funziona anche dalla riga di comando ma non da php.

È sempre stato quello che Emil sta facendo due. Un utente mysql è in realtà una coppia utente/host. quindi gli utenti megadots @ localhost e gli utenti megadots @ mycoolhost sono elencati nella tabella mysql.user come due record 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 dei loro host.

se si riconosce l'utente phpMyAdmin che sta funzionando, guardare 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 host per uno di essi, è possibile che il nome utente con% come host abbia la password sbagliata e non importa quante volte si resetta username @ password di localhost non è valido perché verrà confrontato con il nome utente @% all'accesso.

+0

Anche questo era esattamente il mio problema, solo il nome utente poteva sempre accedere indipendentemente dai privilegi senza password, ma quando veniva assegnato un pass, non funzionava affatto con '%' come host. –

2

Se si utilizza Linux, utilizzare il gestore di pacchetti synaptic per trovare e scaricare tutte le librerie e le mod di cui PHP e MySQL hanno bisogno in modo che entrambi possano connettersi. Il mio problema era che gli script PHP in esecuzione da soli funzionavano sul lato server, ma quando ho provato a utilizzare gli script PHP per connettersi a MySQL non si collegava, vedevo solo una semplice pagina bianca. Poi ho notato che non avevo le librerie client MySQL che PHP usa per collegare a MySQL. Ho avuto solo le librerie del server MySQL. Una volta installate le librerie lato client e riavviato il server Apache, i miei script PHP non hanno avuto problemi di connessione. Di default, PHP 5 non viene installato con le librerie laterali del client MySQL.

+1

Ho installato un server LAMP Ubuntu e ho disinstallato mysql-core, quindi reinstallato. Ha perso php5-mysql lungo la strada e un 'sudo apt-get install php5-mysql' mi ha fatto ripartire. – user898763452

2

Nel mio caso, si è rivelato che avevo eliminato l'utente utilizzato per creare il database che stavo usando. Normalmente questo dovrebbe dare l'errore "il definitore specificato dall'utente non esiste", ma per qualche ragione stava semplicemente restituendo l'accesso più generale negato al mio codice PHP. Non sono sicuro del motivo per cui posso ancora accedere tramite la riga di comando e altre interfacce. Per correggere il mio problema ho ricreato l'utente che è stato cancellato.

+0

problema simile: la risposta di chris wininger mi ha portato alla mia soluzione; Ho installato il mio database di backup (supportato dall'utente 'robert') in un altro computer di sviluppo dell'account utente 'iohann' ...nome utente diverso. Quindi, tutto quello che otterrei era criptico 500 Internal Server Error. Ma, con le note del signor Wininger in mano, mentre facevo il login come utente "iohann", ripristinai il database su una nuova macchina, quindi eseguii immediatamente il backup, quindi lo ripristinai. Tutto ronzante dopo. Mi piacerebbe molto spiegare "perché" ha funzionato. Chiaramente, qualcosa ha a che fare con la "firma dell'utente" sul backup/database. – amalafrida

0

Dopo aver riscontrato un problema simile, ho trovato che la sostituzione di "127.0.0.1" con "localhost" ha fatto il trucco (nonostante il fatto che ero in grado di collegarmi con successo tramite il terminale usando "localhost").

0

Ho avuto lo stesso problema, ma poi ho capito che se si lascia negli account predefiniti con '%' (qualsiasi host), NON PASSWORD quindi non è possibile connettersi con una password. Non sono sicuro di quale sia il problema, ma rimuovendolo li abbiamo risolti.

Problemi correlati