我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

苏南大叔调试了一个前同事留下的代码,发现了一个比较奇怪的问题。那就是:在一个大量循环数据库查询的过程中,基于thinkphp5的一个代码报错了,错误信息是连接数过多。那么如何解决这个奇怪的问题呢?

苏南大叔:thinkphp5,报错too many connections,怎么办? - thinkphp-too-many-connections-hero
thinkphp5,报错too many connections,怎么办?(图3-1)

本文测试环境:macphp@7.2thinkphp@5.0.24

基本描述

在一个for循环中,多次使用thinkphp函数进行了数据库查询。报错信息如下:

 SQLSTATE[08004][1040]Too many connections

截图如下:

苏南大叔:thinkphp5,报错too many connections,怎么办? - too-many-connections
thinkphp5,报错too many connections,怎么办?(图3-2)

当然截图里面显示的错误位置,对于一般的程序员来说,可能并不是个有用的信息。程序员所触发错误的地方,可能是这样的:

foreach ($details as $key => $detail) {
  $res = db("sometable")->where(["link" => $detail["link"]])->find();
  if($res){
    db('sometable')->insert($detail);
  }
}

修复方案

这个修复的方案非常简单,修改语句db('table')Db::table('table')。例如:

foreach ($details as $key => $detail) {
  $res = Db::table("sometable")->where(["link" => $detail["link"]])->find();
  if($res){
    Db::table('sometable')->insert($detail);
  }
}

苏南大叔:thinkphp5,报错too many connections,怎么办? - thinkphp-code-bug
thinkphp5,报错too many connections,怎么办?(图3-3)

相关链接

总结

本文中,苏南大叔就说的是一个thinkphp5的一个小小的使用技巧。对于CRUD仔来说,这个技巧,需要掌握哦~ 更多thinkphp的相关使用技巧,欢迎查看苏南大叔的博客:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php    thinkphp