在PHP中创建到PDO的连接时出错
今天,为了迁移到PHP5.30,我删除并重新安装了LAMP的最新版本,突然一个非常简单的应用程序无法连接到mysql数据库。我正在使用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:
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):
您可能希望修改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公认的答案是针对系统管理员的,这是针对开发人员的;)谢谢