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号又微信号)右上方扫一扫可加博主微信

所写所说,是心之所感,思之所悟,行之所得;文当无敷衍,落笔求简洁。 以所舍,求所获;有所依,方所成!

支付宝赞助
微信赞助

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如您下载该资源,行为将被视为对《免责声明》全部内容的认可->联系老梁投诉资源
LaoLiang.Net部分资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:service@laoliang.net
意在交流学习,欢迎赞赏评论,如有谬误,请联系指正;转载请注明出处: » ThinkPHP下PDO连接数据库报错出现“PDO->__construct(‘mysql:host=localhost…’”(SQLSTATE[HY000] [2002])

发表回复

本站承接,网站推广(SEM,SEO);软件安装与调试;服务器或网络推荐及配置;APP开发与维护;网站开发修改及维护; 各财务软件安装调试及注册服务(金蝶,用友,管家婆,速达,星宇等);同时也有客户管理系统,人力资源,超市POS,医药管理等;

立即查看 了解详情