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

本文测试环境:mac、php@7.2、thinkphp@5.0.24。
基本描述
在一个for循环中,多次使用thinkphp函数进行了数据库查询。报错信息如下:
SQLSTATE[08004][1040]Too many connections截图如下:

当然截图里面显示的错误位置,对于一般的程序员来说,可能并不是个有用的信息。程序员所触发错误的地方,可能是这样的:
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);
}
}
相关链接
- 《thinkphp框架,如何查询出NULL的mysql数据?》 https://newsn.net/say/mysql-null-thinkphp.html
- 《真实黑客案例:thinkphp5网站一键变肉鸡》 https://newsn.net/say/thinkphp-trojan-poc.html
总结
本文中,苏南大叔就说的是一个thinkphp5的一个小小的使用技巧。对于CRUD仔来说,这个技巧,需要掌握哦~ 更多thinkphp的相关使用技巧,欢迎查看苏南大叔的博客: