当前位置: 首页 > 面试题库 >

什么时候应该在PHP中关闭数据库连接?

邵骁
2023-03-14
问题内容

我并不像php开发人员,但我必须使用它,而且我不太了解PHP在会话期间如何处理内存分配。

我正在开发一个要求进行HTTP身份验证的应用程序,一旦登录,便可以通过一个漂亮的界面来操作数据。
有人在另一篇文章中告诉我,我不应该在每次执行后关闭mysql数据连接,但是我不知道在使用此应用程序期间该连接如何保持内存,因为在服务器端我不知道PHP保留了什么内容记忆与否。

所以我的问题是我应该使用单例连接到数据库并且永​​远不要关闭它(因为我永远不知道什么时候不使用该应用程序。或者我应该坚持今天的工作:打开连接->执行语句-
->关闭连接。

PS:我正在使用mysqli

编辑1
我的应用程序是具有MVC模式含义的设计:

|''''''''''|      |'''''''''''''|      |''''''''''''''|
| view.php |  ==> | control.php |  ==> | database.php |
|----------|      |_____________|      |______________|

该模式允许该视图与只通过数据进行交互control.php,然后调用从database.php中的功能SELECTEDIT数据。根据您给我的解释,我应该输入:

public function __destruct(){
    mysql_close($this->connection);
}

inside database.php,但是该页面在需要选择或修改数据时处于加载状态,因此只执行了很短的时间,这意味着它仍将在请求结束时关闭连接。

哪一个给出了一个更精确的问题,即我应该把您提供的代码放在何处,还是我的模式与PHP有关?


问题答案:

永远不要为每个查询创建新的连接;您甚至不必手动关闭它。

只需在页面开头创建连接

看一下:如何有效地连接到php中的mysql,而不必在每个查询上都重新连接

您可以使用此:

public function __destruct()
{
   mysql_close($this->connection);
}

当页面关闭时,它将被调用



 类似资料:
  • 问题内容: 我在ORM上还很新。我刚刚开始阅读有关使用Hibernate的Java Persistence API的书籍和文档。 我只是想知道,关闭EntityManagerFactory与jdbc数据库连接关闭类似吗? 我们是否应该在每次持久/更新/删除后关闭它?如果我们不关闭它,数据库连接会保持打开状态吗? 问题答案: 我只是想知道,关闭与jdbc数据库连接关闭类似吗? 这并非完全正确,但关闭

  • 问题内容: 我有一个简单的静态类,其中有一些方法。这些方法中的每一个都打开SqlConnection,查询数据库并关闭连接。这样,我可以确定我总是关闭与数据库的连接,但是,另一方面,我不喜欢总是打开和关闭连接。以下是我的方法的示例。 考虑到这些方法在静态类内部,我是否应该有一个包含单个SqlConnection的静态成员?我应该如何以及何时丢弃它?最佳做法是什么? 问题答案: 不,除非必须,否则不

  • 问题内容: 在工作中进行大量重构的中间,我希望引入stdClass *作为从函数返回数据的一种方式,并且我试图找到非主观论据来支持我的决定。 是否有任何情况下最好使用一种而不是另一种? 使用stdClass而不是数组有什么好处? 有人会说,函数必须尽可能少且特定,才能返回一个值。 我决定使用stdClass是暂时的,因为从长远来看,我希望为每个进程找到正确的Value Objects。 问题答案:

  • 我在自定义视图的不同方法中多次使用同一个光标。我应该在每次使用后关闭光标还是可以一直打开直到视图被破坏?对于数据库也是一样,一旦创建了包含此视图的活动,就可以打开它吗?当活动被销毁时,它可以关闭吗?我不断收到一个错误“close()从未在数据库上显式调用过…”当我按照上述方法操作时。

  • 问题内容: 我已经掌握了语法,但是我想知道是否有人可以提供说明性的用例,其中数据库同义词非常有用。 问题答案: 测试时非常适合登台模拟表。例如,如果源表包含数百万条记录,并且您想测试一小部分数据,则可以使用同义词将源表重定向到您控制的较小表中,从而可以进行各种方案。 这样,您可以在不影响源表的情况下更新/删除模拟表中的数据。准备使用源表时,您需要做的就是重定向同义词。

  • 问题内容: 我想知道如果不关闭ResultSet是否可以将其关闭?我有一个ResultSet已关闭异常,但是我确定我没有在任何地方关闭ResultSet。我的确切做法是,我使用ResultSet来执行SELECT查询,然后使用相同的ResultSet,因为此方法调用了ResultSet: 那么,另一个问题是:有没有一种方法可以确保打开ResultSet? 第三个问题:也许是问题所在,因为我从不关闭