当前位置:  开发笔记 > 编程语言 > 正文

PHP mySQL - 何时是从数据库断开连接的最佳时机?

如何解决《PHPmySQL-何时是从数据库断开连接的最佳时机?》经验,为你挑选了3个好方法。

我使用延迟连接来连接我的DB对象中的数据库.这基本上意味着它不会调用mysql_connect(),直到第一个查询被传递给它,然后它随后跳过重新连接.

现在我在我的DB类中有一个方法,disconnectFromDB()它调用了几乎所有的调用mysql_close()和设置$_connected = FALSE(因此该query()方法将知道再次连接到DB).应该在每次查询之后(作为私有函数)还是在外部通过对象调用...因为我在想类似的东西(代码只是一个例子)

$students = $db->query('SELECT id FROM students');

$teachers = $db->query('SELECT id FROM teachers');

现在,如果它在每次查询后关闭,那么这会减慢很多,而不是我只是将这一行添加到最后

$db->disconnectFromDB();

或者我应该在页面的最后包含上面的那一行?

有哪些优点/缺点?什么在你的情况下最有效?除了性能损失之外,忘记关闭mySQL连接有什么问题吗?

感谢您花时间回答.

谢谢!



1> Rob Prouse..:

据我所知,除非您使用持久连接,否则您的MySQL连接将在页面执行结束时关闭.

因此,您调用disconnect将不添加任何内容,因为您执行延迟连接,如果您或其他开发人员出错并在错误的时间断开连接,可能会导致创建第二个连接.

鉴于此,我只允许我的连接自动关闭.您的页面应该快速执行,因此在少量时间内保持连接不会导致任何问题.


最?它们都不需要8个小时才能加载:P
+1让PHP清理连接(我不建议使用持久连接).
我还建议您关闭MySQL中的wait_timeout设置.默认值为8小时.大多数网页加载时间不长.

2> Ricardo Amar..:

我刚刚在PHP网站上阅读了有关持久连接的评论,可能有趣的是:

以下是不使用持久连接的重要原因概述:

当您锁定表时,通常在连接关闭时它会被解锁,但由于持久连接不会关闭,因此您意外离开的任何表都将保持锁定状态,解锁它们的唯一方法是等待连接超时或终止这个过程.事务发生同样的锁定问题.(见2002年4月23日和2003年7月12日的评论)

通常,在连接关闭时会删除临时表,但由于持久连接不会关闭,因此临时表不是那么临时.如果在完成后未显式删除临时表,则对于重新使用相同连接的新客户端,该表将已存在.设置会话变量时会出现同样的问题.(见以下评论于2004年11月19日和2006年8月7日)

如果PHP和MySQL位于同一服务器或本地网络上,则连接时间可以忽略不计,在这种情况下,持久连接没有任何优势.

Apache不能很好地与持久连接一起使用.当它收到来自新客户端的请求时,它不会使用已打开持久连接的可用子节点之一,而是会生成一个新子节点,然后必须打开一个新的数据库连接.这会导致过多的进程正在睡眠,浪费资源,并在达到最大连接时导致错误,此外它还会破坏持久连接的任何好处.(见2004年2月3日的评论,以及http://devzone.zend.com/node/view/id/686#fn1上的脚注 )

(我不是那个写上面文字的人)


那个是从哪里来的?在没有引用的情况下从其他地方复制是不恰当的.

3> too much php..:

不要打扰断开连接.$_connected在每个查询之前检查的成本加上实际调用$db->disconnectFromDB();以完成关闭的成本最终会比让PHP在每个页面完成时关闭连接更加昂贵.

推理:

1:如果您将连接保持打开状态直到脚本结束:

PHP引擎循环通过mysql连接的内部数组

PHP引擎在内部为每个连接调用mysql_close()

2:如果您自己关闭连接:

您必须检查$_connected每个查询的值.这意味着PHP必须检查变量$_connectedA)是否存在B)是布尔值而C)是真/假.

你必须调用你的'disconnect'函数,函数调用是PHP中比较昂贵的操作之一.PHP必须检查你的函数A)是否存在,B)是非私有/受保护的,以及C)你为函数提供了足够的参数.它还必须在新的本地范围中创建$ connection变量的副本.

那么你的'disconnect'函数将调用mysql_close(),这意味着PHP A)检查mysql_close()是否存在,B)你已经为mysql_close()和C提供了所有需要的参数,它们是正确的类型(mysql资源).

我可能不是100%正确,但我相信这种可能性对我有利.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有