TP5 报错max_user_connections resource(cerrent value:30)

发布于 2019-01-16  152 次阅读


是个企业官网项目,在本地测试全部正常。上线之后,后台文章管理模块报错:SQLSTATUS [HY000]User 'reeg16' has exceeded the max_user_connections resource(cerrent value:30);如图

查了很多资料,也问了朋友,都是说让修改max_user_connections的值。但是我在数据库用sql语句操作,提示我没有权限修改,就暂时放弃了。但是问题还是得解决,就找了另一个朋友咨询。下边是跟他的聊天记录

然后百度了一下  其实没搜到什么能让我豁然开朗的资料。。也许是我的方式不对,但是我找到了解决方案!!!

修改database.php文件中的参数值:

// 数据库连接参数
'params' => [PDO::ATTR_PERSISTENT => true],

改完就好啦,页面立马就恢复了正常运行~ ~

关于PDO持久连接也叫长连接):

如果操作这个数据的人不多,并你进行长连接的连接资源使用很频繁的话使用长连接。这样速度比较快。

顾名思义,长连接就是一直连接从未断开。你应该清楚数据库连接有的是限定连接个数的。你一直连接就占用了一个连接资源。如果连接这个数据库的人不多的话,这样没问题,还能加快速度,你每次操作数据库的时候不用在进行连接操作。这样会加快效率。

如果这个数据库使用的人比较多的话,最好使用短链接,这样用完就释放。不会一直占着连接资源。导致其他人想用都连接不上。

在PHP中,我们使用new PDO()语句创建一个数据库连接,当连接数据库成功后,将会得到一个PDO类的实例,此连接在PDO对象的生存周期中保持活动。要想关闭连接,需要销毁对象以确保所有剩余到它的引用都被删除,可以赋一个NULL值给对象变量。如果不明确地这么做,PHP在脚本结束时会自动关闭连接。

不过,当我们创建的数据连接为PDO持久化连接时,该连接在使用完毕或者PHP脚本结束后并不会被关闭,而是被PHP缓存起来。当另一个使用相同凭证(主机、端口、数据库名、用户名、密码等信息完全一致)的PHP脚本请求建立连接时,PHP将直接返回之前被缓存起来的连接,从而达到连接重用。持久连接缓存可以避免每次访问数据库都要建立一个新连接的开销,从而让web应用程序更快.

参考文档:http://www.365mini.com/page/php-persistent-connection.htm


欣赏才华