2009-09-16 20 views
24

Hoy, eliminé y reinstalé la última versión de lampp para pasar a php 5.30, y de repente una aplicación muy simple no puede conectarse a la base de datos mysql. Estoy usando DOP conectarse y recibir el siguiente error:Error al crear una conexión a PDO en PHP

Warning: PDO::__construct() [pdo.--construct]: [2002] Invalid argument (trying to connect 
via unix://) in /home/raistlin/www/todoapp/home.php on line 9 

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] 
Invalid argument' in /home/raistlin/www/todoapp/home.php:9 Stack trace: #0 
/home/raistlin/www/todoapp/home.php(9): PDO->__construct('mysql:host=loca...', 'USER', 
'PASSWORD') #1 {main} thrown in /home/raistlin/www/todoapp/home.php on line 9 

yo no estoy poniendo el error en el momento, por el bien de depurarlo.

El código siguiente es suficiente para reproducir el problema en mi sistema:

<?php 
$DBACCESS = array(
    "connstring"=>"mysql:host=localhost;dbname=todoapp", 
    "host"=>"localhost", 
    "user"=>"user", 
    "password"=>"password", 
    "todoapp"=>"todoapp" 
    ); 

    echo implode('<br \>',$DBACCESS); 

    $dbh = new PDO($DBACCESS['connstring'],$DBACCESS['user'],$DBACCESS['password']); 

    $dbh = null; 
?> 

Buscando por Internet, he encontrado una o dos personas con el mismo problema, pero ninguno de ellos ha recibido una respuesta, mucho menos un trabajo. ¿Alguien sabe lo que está pasando? ¿Hay algo que extrañé en la configuración? ¿Qué debo hacer para solucionarlo?

Respuesta

51

Por lo general, significa que es necesario especificar TCP/IP (1), o decirle a MySQL donde su socket de Unix es (2):

  1. "mysql: host = 127.0.0.1" o "mysql: host = localhost; port = 3306"
  2. "mysql: unix_socket =/var/run/mysqld/mysqld.sock"
+1

No estoy seguro de por qué MySQL algunas veces toma "localhost" para significar "Voy a usar un socket Unix" – TML

+1

Perfecto. El problema se resolvió con la opción 2, aunque con la instalación de xampp lampp, necesité usar /opt/lampp/var/mysql/mysql.sock. – krdluzni

+0

Claro. Me alegro de que hayas podido encontrar el zócalo. Acabo de lanzar un ejemplo y recé para que lo encontraras. :) – TML

1

La causa más común de un error como este sería que MySQL no se está ejecutando.

+0

He comprobado que, ya. Incluso hasta el punto de cerrarlo y reiniciarlo. – krdluzni

+0

¿Cómo sabes que es el * más común *? – dakab

9

Es posible que desee modificar php.ini de manera DOP puede encontrar mysql.sock especificando el pdo_mysql.default_socket = /opt/lampp/var/mysql/mysql.sock (en el caso de xampp). No olvide reiniciar Apache después de cambiar php.ini.

(Lo siento, esta parece ser una solución repetida).

24

También puede usar 127.0.0.1, en lugar de especificar "localhost", en su cadena de conexión db para evitar este problema por completo.

+4

La respuesta aceptada es para administradores de sistemas, este es para desarrolladores;) gracias! – jack

4

Estoy usando MAMP 2.0.1 y Symfony 1.4 con Doctrine para este proyecto.

Tercera opción trabajó para mí con una pequeña modificación: en /config/databases.yml

dsn: 'mysql:unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock;dbname=MY_DB_NAME;'