苏南大叔调试了一个前同事留下的代码,发现了一个比较奇怪的问题。那就是:在一个大量循环数据库查询的过程中,基于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的相关使用技巧,欢迎查看苏南大叔的博客:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

 【加群】加入QQ群【175454274】和大家一起讨论这个问题

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

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

本站的忠实读者小伙伴,正在阅读下面这些文章: