Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中创建到PDO的连接时出错_Php_Pdo_Lampp - Fatal编程技术网

在PHP中创建到PDO的连接时出错

在PHP中创建到PDO的连接时出错,php,pdo,lampp,Php,Pdo,Lampp,今天,为了迁移到PHP5.30,我删除并重新安装了LAMP的最新版本,突然一个非常简单的应用程序无法连接到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:

今天,为了迁移到PHP5.30,我删除并重新安装了LAMP的最新版本,突然一个非常简单的应用程序无法连接到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;
?>


在网上,我发现另外一两个人也有同样的问题,但他们都没有收到回复,更不用说有效的回复了。有人知道发生了什么吗?配置中是否有我遗漏的内容?我需要做些什么来修复它?

像这样的错误最常见的原因是MySQL没有运行。

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

  • “mysql:host=127.0.0.1”或“mysql:host=localhost;port=3306”
  • “mysql:unix_socket=/var/run/mysqld/mysqld.sock”

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


    (很抱歉,这似乎是一个重复的解决方案)。

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

    我在本项目中使用MAMP 2.0.1和Symfony 1.4

    第三种选择对我来说很有效,只是做了一点小小的修改: 在/config/databases.yml中

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

    我已经查过了。甚至到了关闭并重新启动它的地步。你怎么知道它是最常见的呢?我不知道为什么MySQL有时把“localhost”理解为“我要使用Unix套接字”的意思。选项2解决了这个问题,尽管在xampp lampp安装中,我需要使用/opt/lampp/var/mysql/mysql.sock.Sure。很高兴你能找到插座——我只是在里面放了个例子,祈祷你能找到它。:)这里也有同样的问题@krdluzni,看到你的评论,我刚刚做了这样一件事:
    pdo_mysql.default_socket=/opt/lampp/var/mysql/mysql.sock
    ,在/opt/lampp/etc/php.ini文件中,它成功了。否则我会想知道我在Zend框架中肯定犯了什么配置错误。所以谢谢你发这个帖子!只需在设置中添加端口,如
    'host'=>env('DB_host','192.168.1.165'),'port'=>env('DB_port','3317'),
    而不是定义192.168.1.165:3317公认的答案是针对系统管理员的,这是针对开发人员的;)谢谢