Questa risposta è stato modificato più volte sulla base di nuove informazioni fornite dal PO
è root in realtà permesso per connettersi al server dall'host che ci si connette da? Se la stringa di errore sta tornando il nome canonico del server, c'è una buona possibilità che 'localhost' non punta a 127.0.0.1:
"Accesso negato per l'utente 'root'@'MY.SERVER .HOST.NAME' a database 'dbname'"
Questo dovrebbe eco qualcosa come "Accesso negato per l'utente 'root' @ localhost'", non il nome del server.
Prova:
$con = mysql_connect("127.0.0.1","root","pass");
Modifica (Dopo più informazioni fornite nei commenti)
Se ci si connette da un host completamente diversa, è necessario dire a MySQL [email protected]_hostname_or_ip
è consentito per la connessione, e ha i privilegi appropriati per creare un database e gli utenti.
È possibile farlo abbastanza facilmente usando phpmyadmin (sul server MySQL), o di una query come:
CREATE USER 'root'@'192.168.1.1' IDENTIFIED BY PASSWORD 'secret';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.1.1' IDENTIFIED BY PASSWORD 'secret' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
Vorrei consigliare non nominare questo utente 'root', basta creare un utente con tutti gli i privilegi globali necessari Nell'esempio, ho usato 192.168.1.1, che potrebbe facilmente essere un nome host, ma assicurati che il DNS sia impostato in modo appropriato. Specificare l'host corrispondente a esattamente come appare nei registri quando ci si connette al server remoto.
Si potrebbe anche voler regolare i limiti a piacere. Ulteriori informazioni sulla sintassi CREATE USER
possono essere found here, GRANT
here.
Modifica
Se si utilizza MySQL 4 - CREATE non è un'opzione. Si potrebbe semplicemente usare GRANT (4.1 Docs On User Management)
Modifica
Se si utilizza C-Panel, appena use the API. Mentre sì, ha le sue stranezze, è più facile mantenere roba che lo usa piuttosto che lavorare ad-hoc. Un sacco di applicazioni di successo lo usano senza problemi. Come qualsiasi altra API, è necessario tenere il passo con le modifiche quando lo si utilizza.
Appena notato, ho copiato il mio codice errato sopra. Questo script è in realtà in esecuzione su 1 server e tenta di installare il database su un altro in modo che non si connetta a localhost in ogni caso – robjmills
@snaken - Aggiornato la mia risposta –
nel caso in cui ci fosse un problema con l'utente ho rimosso l'utente e ho cercato di ricrearli con il tuo codice ma sto ricevendo un errore di sintassi? – robjmills