ThinkPHP下PDO连接数据库报错出现“PDO->__construct(‘mysql:host=localhost…’”(SQLSTATE[HY000] [2002])
[重要通告]如您遇疑难杂症,本站支持知识付费业务,扫右边二维码加博主微信,可节省您宝贵时间哦!
前几天有个客户说他装的ThinkPHP框架的站点,过一段时间就崩了~~出现一系列的错误,先出现的是(SQLSTATE[HY000] [2002])
过一点时间又出现“PDO->__construct(‘mysql:host=localhost…’” 如下图
关于SQLSTATE[HY000] [2002] ThinkPHP或者mysql出现“SQLSTATE[HY000]: General error: 1030 Got error 28 from storage engine”的解决办法
出现SQLSTATE[HY000] [2002] ,这问题也不一定是单一的问题,来分析一下;
PDO连接数据库报错:“SQLSTATE[HY000] [2002] No such file or directory”。
出现这个问题的原因是PDO无法找到mysql.sock或者mysqld.sock
PDO连接数据库报错解决方法1:
找到相应的.sock文件,并设置php.ini文件中的pdo_mysql.default_socket的值为.sock文件的路径。
pdo_mysql.default_socket= /tmp/mysqld.sock
然后重启Apache,或者nginx下重启php-fpm即可。
PDO连接数据库报错解决方法2:(我是用这种方法解决,简单省力)
将PDO连接中的dsn的host由“localhost”改为“127.0.0.1”即可
解惑:WordPress在数据库连接使用127.0.0.1与localhost对数据库连接速度的影响
延伸阅读:用localhost连接MySQL和127.0.0.1有什么区别呢?
在我们印象中这两个都可以访问到本地的服务,但是本质上有什么区别的?
host=127.0.0.1,使用 TCP连接,mysql server会认为这个连接来自127.0.0.1这个IP或者localhost.localdomin这个域名。
host=localhost,不使用TCP连接,它使用Unix socket连接mysql服务
以上是这两种host连接区别的简单总结,知道了这个区别,当php用localhost去连接mysql的时候,它该用哪个socket呢?大家都知道mysql服务启动后它的进程里有一个--socket=/var/lib/mysql/mysql.sock的参数(大家的地址和我的可能会不相同,这个可以在mysq.cnf中进行设置),其中这个mysql.sock就是要用到的socket,我们只要把这个完整地址告诉php就可以,告诉的方式就是修改php.ini
pdo_mysql.default_socket= 这项是否有配置或者配置是否正确
设置好以后重启php-fpm就大功告成了。
问题未解决?付费解决问题加Q或微信 2589053300 (即Q号又微信号)右上方扫一扫可加博主微信
所写所说,是心之所感,思之所悟,行之所得;文当无敷衍,落笔求简洁。 以所舍,求所获;有所依,方所成!