目录

ThinkPHP3.2的疑惑

没看到关闭 MySQL 连接

在使用 TP3.2 的过程中,一直看到使用 M 方法,查询数据,那 M 方法肯定帮我们连接上了 MySQL,但是没看到他关闭啊。既然没有连接池,那数据库连接用完应该关闭不是,不然 MySQL 会报很多 Warning。

/images/image-20220819184304663.png

我想这些客户端异常关闭肯定不是框架造成的,成熟的框架肯定会自动关闭,关闭连接可能放在析构方法__destruct()中了。

果不其然,在\Think\Db\Driver::_destruct()中,关闭了PDO连接。

/images/image-20220819184604616.png

代码的意思,就是给 PDO 赋 null 值,就能被关闭。是的。

给 PDO 连接关闭的两种方式

关闭 PDO 连接 2 种方式,其中一种就是赋值 null。手册里也是这么说的。另一种方式是,别管他,等 PHP 进程执行完毕,自动关闭。

总结就是一种显式关闭连接,也叫主动关闭连接,另一种是隐式关闭,也叫被动关闭,哈哈自己总结的,官方没这么说。

/images/image-20220819185253928.png

==注意==:给 PDO 赋值 null 后,并不是脚本执行完,连接才关闭,而是赋值 null 后,立即关闭。我真实测试过。也发现当变量被赋值 null 后,内存就会被回收了