tags:

views:

4945

answers:

5

Today, I removed and reinstalled the latest version of lampp in order to move to php 5.30, and suddenly a very simple app is failing to connect to the mysql database. I'm using PDO to connect, and receiving the following error:

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

I am not catching the error at the moment, for the sake of debugging it.

The following code is enough to replicate the issue on my system:

<?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;
?>

Looking online, I've found one or two other people with the same issue, but none of them have received a response, much less a working one. Does anyone know what is happening? Is there something I missed in the configuration? What do I need to do to fix it?

+1  A: 

The most common cause of an error like this would be that mysql isn't running.

Nouveau
I've checked that, already. Even to the point of shutting it down and restarting it.
krdluzni
+9  A: 

Usually means that you need to specify TCP/IP (1), or tell MySQL where your Unix socket is (2):

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

TML
I'm not sure why MySQL sometimes takes "localhost" to mean "I'm going to use a Unix socket"
TML
Perfect. The problem was solved with option 2, although with the xampp lampp installation, I needed to use /opt/lampp/var/mysql/mysql.sock.
krdluzni
Sure. Glad you were able to find the socket - I just threw an example in there and prayed you'd find it. :)
TML
Same problem here too. @krdluzni, seeing your comment I just did this: `pdo_mysql.default_socket=/opt/lampp/var/mysql/mysql.sock` in the /opt/lampp/etc/php.ini file, and it worked.I would otherwise be wondering what configuration error I must have made in Zend Framework. So thanks for posting this!
namespaceform
+3  A: 

You might want to modify php.ini so PDO can find mysql.sock by specifying the pdo_mysql.default_socket = /opt/lampp/var/mysql/mysql.sock (in the case of xampp). Don't forget to restart Apache after changing php.ini.

(Sorry, this seems to be a repeated solution).

reeserc
+1  A: 

You can also use 127.0.0.1, rather than specifying "localhost", in your db connection string to avoid this issue altogether.

jefftulsa
A: 

Thanks for this! configuring the mysql_socket for PDO in php.ini did it, im not used to working with PDO and never thought of that, knowing that the mysql sock was already set properly.. would have thought that PDO would be using the same...

Ben