thinkphp5.0 与thinkphp5.1 db()函数的区别
Posted 老凡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkphp5.0 与thinkphp5.1 db()函数的区别相关的知识,希望对你有一定的参考价值。
最近在做项目分别使用了TP5.0,TP5.1查看日志文件的时间发现一个有趣的问题,
以我做过的测试代码为例
for ($i = 0; $i < 700; $i++) {
$tmp[\'name\'] = \'f_\'.$i;
$tmp[\'times\'] = date(\'Y-m-d H:i:s\');
db(\'task\')->insert($tmp);
}
很简单的代码,就是在task这个表中连续插入700条数据。
在使用TP5.1的时候,查看日志文件发现
[ sql ] [ DB ] CONNECT:[ UseTime:0.000533s ] mysql:host=127.0.0.1;dbname=xun_php_cn;charset=utf8
[ sql ] [ SQL ] INSERT INTO `op_task` (`name` , `times`) VALUES (\'f_7\' , \'2019-11-20 16:19:52\') [ RunTime:0.001197s ]
[ sql ] [ DB ] CONNECT:[ UseTime:0.000514s ] mysql:host=127.0.0.1;dbname=xun_php_cn;charset=utf8
[ sql ] [ SQL ] INSERT INTO `op_task` (`name` , `times`) VALUES (\'f_8\' , \'2019-11-20 16:19:52\') [ RunTime:0.001186s ]
[ sql ] [ DB ] CONNECT:[ UseTime:0.000546s ] mysql:host=127.0.0.1;dbname=xun_php_cn;charset=utf8
[ sql ] [ SQL ] INSERT INTO `op_task` (`name` , `times`) VALUES (\'f_9\' , \'2019-11-20 16:19:52\') [ RunTime:0.001553s ]
[ sql ] [ DB ] CONNECT:[ UseTime:0.000641s ] mysql:host=127.0.0.1;dbname=xun_php_cn;charset=utf8
[ sql ] [ SQL ] INSERT INTO `op_task` (`name` , `times`) VALUES (\'f_10\' , \'2019-11-20 16:19:52\') [ RunTime:0.001717s ]
每插入一条数据,都需要重新连接MYSQL
同样的代码 在使用TP5.0的时候 就只有一条连接MYSQL的日志
[ sql ] [ DB ] CONNECT:[ UseTime:0.000533s ] mysql:host=127.0.0.1;dbname=xun_php_cn;charset=utf8
[ sql ] [ SQL ] INSERT INTO `op_task` (`name` , `times`) VALUES (\'f_7\' , \'2019-11-20 16:19:52\') [ RunTime:0.001197s ]
[ sql ] [ SQL ] INSERT INTO `op_task` (`name` , `times`) VALUES (\'f_8\' , \'2019-11-20 16:19:52\') [ RunTime:0.001186s ]
[ sql ] [ SQL ] INSERT INTO `op_task` (`name` , `times`) VALUES (\'f_9\' , \'2019-11-20 16:19:52\') [ RunTime:0.001553s ]
并且 测试虚拟机 mysql连接数设置为 800
for ($i = 0; $i < 1000; $i++) {
$tmp[\'name\'] = \'f_\'.$i;
$tmp[\'times\'] = date(\'Y-m-d H:i:s\');
db(\'task\')->insert($tmp);
}
如果插入数据是1000条 TP5.1就会报错 提示 too many connecntios 错误 ,TP5.0不会报错
并且换一种写法 TP5.1的时候会报错,
$obj = db(\'task\');
for ($i = 0; $i < 1000; $i++) {
$tmp[\'name\'] = \'f_\'.$i;
$tmp[\'times\'] = date(\'Y-m-d H:i:s\');
$obj->insert($tmp);
}
TP5.0 这种写法就正常执行,并且效率提升很多 请看我前面的测试结果
https://www.cnblogs.com/fuyifan/p/11898241.html
以我粗浅的理解,是不是TP5.1越搞越回去了?
以上是关于thinkphp5.0 与thinkphp5.1 db()函数的区别的主要内容,如果未能解决你的问题,请参考以下文章
[代码审计]ThinkPHP 5.0.x 变量覆盖导致的RCE分析