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

krd*_*zni 25 php pdo lampp

今天,我删除并重新安装了最新版本的lampp,以便转移到PHP 5.30,突然一个非常简单的应用程序无法连接到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
Run Code Online (Sandbox Code Playgroud)

为了调试它,我现在没有捕获错误.

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

<?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;
?>
Run Code Online (Sandbox Code Playgroud)

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

TML*_*TML 51

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

  1. "mysql:host = 127.0.0.1"或"mysql:host = localhost; port = 3306"
  2. "MySQL的:unix_socket =的/ var /运行/的mysqld/mysqld.sock"

  • 这里也有同样的问题.@krdluzni,看到你的评论我刚刚这样做了:/ pop_mysql.default_socket =/opt/lampp/var/mysql/mysql.sock`在/opt/lampp/etc/php.ini文件中,它有效.否则我会想知道我必须在Zend Framework中做出什么配置错误.所以感谢发布这个! (3认同)

小智 24

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

  • 接受的答案是系统管理员,这个是开发人员;)谢谢! (4认同)

小智 9

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

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