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:

nueva PDO ('mysql: host = localhost; puerto = 3306; dbname = test', 'nombre de usuario', 'contraseña');

Y recibo un buen mensaje de excepción que dice esto:

Advertencia: PDO :: __ construct (): [2002] No existe tal archivo o directorio (intentando conectarse a través de unix: ///tmp/mysql.sock) en ...

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.

¿Fue útil?

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

  1. 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
  2. Edite su archivo php.ini y establezca correctamente el valor para pdo_mysql.default_socket

  3. 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í .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top