问题
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:
Usually means that you need to specify TCP/IP (1), or tell MySQL where your Unix socket is (2):
- "mysql:host=127.0.0.1" or "mysql:host=localhost;port=3306"
- "mysql:unix_socket=/var/run/mysqld/mysqld.sock"
回答2:
You can also use 127.0.0.1, rather than specifying "localhost", in your db connection string to avoid this issue altogether.
回答3:
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).
回答4:
I'm using MAMP 2.0.1 and Symfony 1.4 with Doctrine for this project.
Third option worked for me with a small modification: in /config/databases.yml
dsn: 'mysql:unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock;dbname=MY_DB_NAME;'
回答5:
The most common cause of an error like this would be that MySQL isn’t running.
来源:https://stackoverflow.com/questions/1435445/error-on-creating-connection-to-pdo-in-php