25

今天,为了迁移到php 5.30,我删除并重新安装了最新版本的lampp,突然一个非常简单的应用程序无法连接到mysql数据库。我正在使用 PDO 进行连接,并收到以下错误:

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

为了调试它,我目前没有发现错误。

以下代码足以在我的系统上复制该问题:

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

在网上查看,我发现一两个人有同样的问题,但他们都没有收到回复,更不用说工作了。有谁知道发生了什么?我在配置中遗漏了什么吗?我需要做什么来修复它?

4

5 回答 5

52

通常意味着您需要指定 TCP/IP (1),或者告诉 MySQL 您的 Unix 套接字在哪里 (2):

  1. “mysql:host=127.0.0.1”或“mysql:host=localhost;port=3306”
  2. “mysql:unix_socket=/var/run/mysqld/mysqld.sock”
于 2009-09-16T21:17:19.170 回答
24

您还可以在数据库连接字符串中使用 127.0.0.1,而不是指定“localhost”,以完全避免此问题。

于 2010-02-12T16:18:39.987 回答
9

您可能想要修改 php.ini,以便 PDO 可以通过指定pdo_mysql.default_socket = /opt/lampp/var/mysql/mysql.sock(在 xampp 的情况下)找到 mysql.sock。更改 php.ini 后不要忘记重新启动 Apache。

(对不起,这似乎是一个重复的解决方案)。

于 2009-11-19T03:22:55.923 回答
4

我在这个项目中使用 MAMP 2.0.1 和 Symfony 1.4 with Doctrine。

第三个选项对我进行了一些小的修改:在 /config/databases.yml

dsn: 'mysql:unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock;dbname=MY_DB_NAME;'
于 2011-07-20T18:39:22.750 回答
2

此类错误的最常见原因是 MySQL 没有运行。

于 2009-09-16T21:11:18.060 回答