php使用pdo连接报错Connection failed SQLSTATE的解决方法
本文实例讲述了phppdo_mysql连接报错Connectionfailed:SQLSTATE[HY000][2002]Nosuchfileordirectory问题的解决方法。分享给大家供大家参考。具体方法如下:
错误描述:
Connectionfailed:SQLSTATE[HY000][2002]Nosuchfileordirectory
环境概述:
MacOS
xampp搭建的开发环境apachemysqlphp
xampp已支持mysqloracle测试ok,且phpinfo已上显示支持pdo_mysqlpdo_pgsqlpdo_sqlite
其中mysql我用的是brew包管理安装到机器里面的,而非xampp自带的mysql
phppdo连接报错Connectionfailed:SQLSTATE[HY000][2002]Nosuchfileordirectory
开始以为找不到文件是因为urlrewrite导致的,(因为从nginx切换到apache)结果跟踪程序发现是newpdo报错
经过搜索一些资料研究发现:
这个是php.ini配置文件中pdo_mysql.default_socket指定的mysql.sock路径不对
我的mysql.sock文件在/private/tmp/mysql.sock
所以要设置:
pdo_mysql.default_socket=/private/tmp/mysql.sock
如果不知道自己的mysql.sock在哪里可以搜索(因为编译安装,和yum、apt-get、或者brew等包管理工具安装的位置不一样)
sudofind/-name'mysql.sock'
下面是官方给出bug修复
1.Openupphp.ini(minewasin/private/etc/)
2.locatethisline:pdo_mysql.default_socket=/var/mysql/mysql.sock
3.Changethelineto:pdo_mysql.default_socket=/tmp/mysql.sock
4.Restartapache
1、我这里需要补充下,如果是新系统或者刚玩php的同志,在Mac的系统中php.ini文件不存在。
2、需要在/private/etc/目录下cp php.ini.default
php.ini,然后再做修改下
3、但是如果使用的xamppmysql作为数据库,那么就不需要使用官方的step2,直接写下面方式就可以了。
pdo_mysql.default_socket=/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
解决方法三:
sudovim/etc/php.ini
把以下三个原来空白的值都设置为:
/tmp/mysql.sock mysql.default_socket=/tmp/mysql.sock pdo_mysql.default_socket=/tmp/mysql.sock mysqli.default_socket=/tmp/mysql.sock
都修改了
修改完成后使用
sudo/usr/sbin/apachectlrestart
问题搞定!
希望本文所述对大家的PHP程序设计有所帮助。