Mysqli - 我应该每次都重新连接吗?

时间:2014-01-13 23:19:16

标签: mysqli

我正在这里开发一个项目,每当我需要向MYSQL发送查询时,我正在打开一个新的连接。

这是正确的还是我应该只连接一次?我该怎么办?

谢谢

2 个答案:

答案 0 :(得分:0)

服务器和数据库具有有限数量的可用连接。如果您的每个用户都无缘无故地保持打开连接(例如,当他们正在阅读已经加载的页面的博客帖子时),那么它将限制可以连接到生产中的项目的人数。除非有特别需要保持连接打开,否则我建议不要这样做。

但是,它实际上取决于项目的范围。如果您只是在谈论网站的单个页面,通常可以将连接保持打开状态,直到您完成加载页面为止。

答案 1 :(得分:0)

可能您不应该为每个查询打开新连接。

当然,每个通用规则都有例外,但通常您应该在第一个查询之前连接一次,然后在给定的PHP请求期间为多个查询重用相同的mysqli连接对象。

使用给定连接可以串行运行的查询数量没有限制。唯一的限制是您一次只能运行一个查询

以这种方式思考:如果您正在编写PHP脚本来简单地读取文件,并且您知道要从文件中读取多行,则会保持文件句柄处于打开状态并从中发出多个读取请求在关闭文件之前。每次想要在单个PHP请求中读取文件时,都不会重新打开文件。

打开与数据库的新连接的开销相当低(至少对于MySQL而言),但如果您有机会轻松减少开销,那么这样做是值得的。


重新评论:

你是对的,没有办法让你的$ mysqli对象跨页面。这就是术语 request 的含义。在请求结束时清理对象和资源。

当你说你为每个查询创建一个新的数据库连接时,我认为你的意思是如果你在一个请求(即页面视图)中执行多个SQL查询,那么你将创建一个新的$ mysqli每个查询的对象。那是不必要的。

还有另一种方法可以重用从一个页面视图到下一个页面视图的数据库连接。那就是使用persistent connections。这不会保留$ mysqli对象 - 您仍然必须在每个页面加载时运行new mysqli。但在内部,它正在重用以前的PHP请求中的数据库连接。

以这种方式打开持久连接所需要做的就是在主机名中添加前缀p: