Connessione tramite socket MySQL con Zend Framework
-
22-07-2019 - |
Domanda
Di recente ho iniziato a utilizzare Zend Framework. Ho iniziato a sviluppare sul mio server XAMPP locale che è andato bene, ma quando ho caricato sul mio account 1and1, continuo a ricevere il seguente errore:
Messaggio: SQLSTATE [HY000] [2002] Impossibile connettersi al server MySQL locale tramite socket '/var/run/mysqld/mysqld.sock' (2)
Ho provato a cambiare la linea resources.db.params.unix_socket nel mio file application.ini con quelli diversi menzionati in phpinfo ma senza successo. Ho trovato qui a cui qualcuno ha risposto
Il server MySQL si trova sullo stesso host come l'applicazione web? Altrimenti, tu non è possibile utilizzare una connessione socket e dovrà connettersi tramite TCP.
Penso che sia il caso del mio host web. Come posso cambiare ZF per connettermi invece tramite TCP? Attualmente sto usando PDO_MYSQL.
Soluzione 2
Avevo lasciato la riga:
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'development'));
nel mio index.php com'è ma aveva cambiato public / .htaccess in
SetEnv APPLICATION_ENV production
Sembra che .htaccess non sia stato letto. Ho cambiato l'istruzione else in index.php in 'produzione' per usare le impostazioni del database di produzione e ha funzionato. Abbastanza frustrante. Mi chiedo perché non sia stata letta la variabile d'ambiente. Grazie per il tuo aiuto.
Altri suggerimenti
La modalità di connessione a MySQL dipende dai parametri passati a mysql_connect () . Se gli passi un percorso di file, ad es. /var/run/mysqld/mysqld.sock
, tenterà una connessione socket. Se gli passi un nome host, tenterà una connessione TCP.
Devi trovare il nome host (o IP) del server mysql e collegarti ad esso in questo modo:
mysql_connect ( '127.0.0.1:3306', $ username, $ password);
Le quote sono per ZF, puoi semplicemente specificarlo nel file di configurazione in cui memorizzi le impostazioni del tuo database, o quando ti connetti al database usando l'impostazione host
:
$db = new Zend_Db_Adapter_Pdo_Mysql(array(
'host' => '127.0.0.1',
'username' => 'webuser',
'password' => 'xxxxxxxx',
'dbname' => 'test'
));
Modifica : se stai passando un nome host / porta appropriato come parametro host a mysql_connect ()
e ricevi questo messaggio, allora è molto probabilmente un problema di configurazione del server.
Prova a modificare l'impostazione mysql.default_socket
, in php.ini o nella parte superiore del codice dell'applicazione utilizzando ini_set ()
ini_set('mysql.default_socket','/path/to/real/socket.sock');
Dovrai capire dove si trova il file socket. Spesso è "/var/lib/mysql/mysql.sock", ma penso che dipenda dal sistema.
Zend Framework ha un'opzione in db params unix_socket
, basta usarlo
$config= array(
'db' => array(
'host' => 'localhost',
'username' => 'user',
'password' => 'pass',
'dbname' => 'dbname',
'dbprefix' => '',
'unix_socket' => '/var/lib/mysqld/mysqld.sock'
)
);