Prima di tutto, non si dovrebbe (mai) utilizzare il mysql_ * l'estensione e la sua funzione più. Sono obsoleti, deprecati e saranno rimossi da php in una versione vicina. Utilizzare mysqli_ o PDO. Vedi the huge red warning at the top of the mysql_connect page in the php docs per maggiori informazioni.
- Verificare che ci si connette al server giusto
il collegamento ad un server web in SSH, e utilizza il client mysql locale per connettersi al server di database come root (vi verrà chiesto la password per il utente root):
$ mysql -uroot -p -hXXXXXXX.XXXXXXXXXX.eu-west-1.rds.amazonaws.com
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 100530
Server version: 5.1.66-0+squeeze1 (Debian)
[...]
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Se questo lavoro, si dovrebbe finire su un prompt mysql. Se ciò non ha funzionato, il problema si trova nella configurazione di rete, il server web non può connettersi al server mysql (controllare le aperture delle porte).
Assicurarsi che il database in questione esiste sul server
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| [... db names ...] |
+--------------------+
X rows in set (0.00 sec)
mysql>
Se non è possibile vedere il nome del database nella lista, questo significa che il server vostra sede in phpMyAdmin non sia corretta uno; controlla le tue impostazioni phpmyadmin.
Verificare se è possibile connettersi con questo utente utilizzando il client cli mysql. Si noti che non si specifica un database sulla linea di connessione.
// close the root connection
mysql> quit
Bye
// connect using your specific user, replace USERNAME with your db user (and type its password when asked)
$ mysql -uUSERNAME -p
Enter password:
[...]
mysql>
Se questo non funziona e non si arriva a una richiesta, questo può essere o perché il permesso non lo fa esiste, o perché l'utente non riesce a connettersi dall'host specificato. Guarda il messaggio di errore che mysql mostrerà; qualcosa di simile a!
ERROR 1045 (28000): Access denied for user 'USERNAME'@'HOST' (using password: NO)
Qual è l'host è importante e bisogna assicurarsi che sia consentito nei vostri privilegi. Se tutto sembra ok e non funziona ancora, prova a modificare i privilegi per quell'utente e imposta l'HOST su '%' (significa che tutto è permesso). Se funziona, significa che l'HOST è configurato erroneamente nei privilegi di mysql.
Verificare se l'utente può visualizzare il database in questione. Quando ti connetti con un utente specifico, "mostra database" elenca solo i database che questo utente ha i privilegi da vedere.
mysql > show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| [... db names ...] |
+--------------------+
X rows in set (0.00 sec)
mysql>
Se non è possibile vedere il vostro database nell'elenco, significa che i privilegi per l'utente sono sbagliati/non impostato per questo database.
Se ogni passaggi qui funziona bene, probabilmente significa che hai un errore nel codice php, ricontrollare l'host, password, nome utente, ...
Se davvero non riesco a capire che cosa parti dei privilegi sono sbagliate, provare a creare un utente fittizio saranno tutte le autorizzazioni da qualsiasi host:
$ mysql -uroot -p -hXXXXXXX.XXXXXXXXXX.eu-west-1.rds.amazonaws.com
Enter password:
mysql > GRANT ALL ON yourdbname.* to 'testuser'@'%' IDENTIFIED BY 'dummypassword';
mysql > quit
Bye
// note that I give the password in the prompt directly, to make sure this isn't an input error just in case
$ mysql -utestuser -pdummypassword
mysql >
una volta che hai fatto questo utente e può connettersi ad esso, cercare di connettersi ad esso utilizzando il php codice. Una volta eseguita questa operazione, elimina l'utente (utilizzando DROP USER 'testuser'
), creandolo di nuovo con un privilegio HOST più limitato e riprova, finché non hai replicato le autorizzazioni desiderate.
Ricordarsi di eliminare quell'utente e il gioco è fatto.
Ok, questo è davvero un buon feedback. Ho eseguito la query 'show databases' e ho elencato i database' information_schema', 'performance_schema',' mysql' e 'ckdb'. Ma in 'phpMyAdmin' vedo solo i due schemi sopra, oltre a' mysql' più quelli che ho creato come 'test' e' test1', ma non 'ckdb'. Come potrei leggere e scrivere sulle tabelle 'test' e' test1' che ho creato in 'phpMyAdmin'? –
Ahh, sembra che tu abbia creato i database nel tuo computer locale tramite phpMyAdmin invece di Amazon RDS. Devi configurare phpMyAdmin per utilizzare Amazon RDS come database esterno. Vedi questo tutorial su come configurarlo: 'http: // blog.benkuhl.com/2010/12/how-to-remoty-manage-an-amazon-rds-instance-with-phpmyadmin /'. E poi devi menzionare il database su cui vuoi eseguire la query sul database selectbox. – user568109