Error al conectarse a MySQL usando PHP / PDO
Pregunta
Mi código estaba funcionando bien ayer y hoy de repente simplemente no quiero conectarme a mi base de datos. No he cambiado la configuración ni el código ni tampoco he actualizado ningún software. Todo lo que hago es esto:
Y recibo un buen mensaje de excepción que dice esto:
La cuestión es: claramente no estoy tratando de conectarme usando un socket Unix sino usando TCP / IP. ¿Qué estoy haciendo mal? ¿Hay algo que me falta aquí?
Gracias por cualquier ayuda.
Solución
Está utilizando un socket Unix. Al leer " localhost " Las bibliotecas de cliente MySQL no lo interpretan como host TCP " localhost " y resuelva ese nombre pero use la ubicación de Socket predeterminada. Para usar TCP en la máquina local, debe usar 127.0.0.1
como nombre de host.
Para especificar el pasado, use unix_socket
en lugar de host
en el DSN. La ubicación del socket utilizado para localhost
se puede definir en tiempo de compilación o en algunas versiones de PHP usando pdo_mysql.default_socket
en php.ini
.
Otros consejos
De la documentación de PHP sobre la conexión a MySQL usando PDO: PDO_MYSQL DNS
La nota al final dice:
Solo Unix:
Cuando el nombre de host se establece en "localhost", entonces la conexión al El servidor se realiza a través de un socket de dominio. Si PDO_MYSQL se compila contra libmysql, entonces la ubicación del archivo de socket está en libmysql Compilado en la ubicación. Si PDO_MYSQL se compila contra mysqlnd a el socket predeterminado se puede establecer a través de la configuración pdo_mysql.default_socket.
Entonces, para solucionar esto, tendría que configurar correctamente en php.ini la ubicación de su mysql.sock
-
Encuentra tu archivo mysql.sock. Ubicaciones comunes:
- /tmp/mysql.sock
- /tmp/mysql/mysql.sock
- /var/mysql/mysql.sock
- o si usa MAMP o LAMP busque dentro de la carpeta tmp para mysql
-
Edite su archivo php.ini y establezca correctamente el valor para pdo_mysql.default_socket
-
Reinicie su servidor Apache para recoger los cambios en el archivo php.ini
En Ubuntu, puede usar esta configuración en php.ini
pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock
Acabo de agregar esta línea:
'unix_socket' => '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock',
y todo estuvo bien.
Hay una actualización de los documentos para Drush que está documentada aquí .