【发布时间】:2012-08-04 11:58:29
【问题描述】:
我只是想知道,在页面末尾用 PHP 关闭 MySQL 连接是否很好?有什么优势?关了有关系吗?
真诚地, 乔伊
【问题讨论】:
我只是想知道,在页面末尾用 PHP 关闭 MySQL 连接是否很好?有什么优势?关了有关系吗?
真诚地, 乔伊
【问题讨论】:
通常不需要使用 mysql_close(),因为非持久打开的链接会在脚本执行结束时自动关闭,但请记住,一旦不再需要资源,就立即终止它们始终是一个好习惯。如果您的脚本长时间占用您不再需要的资源,只会让您更接近资源耗尽
【讨论】:
无论如何,PHP 都会在脚本结束时释放任何资源。
例如,最好释放文件资源并锁定文件,因为您的脚本可能会以 1s 形式运行,但您可能只需要在脚本开始时的几毫秒内使用该文件。
如果您在开始时使用 SQL 几毫秒,则使用相同的推理,然后只处理提取的数据 - 通过关闭您的连接,您允许另一个连接代替您的位置(MySQL 限制同时有多少可以建立连接)。
另一方面,如果您在脚本结束时释放它,因为您在脚本的整个执行过程中(间歇性地)使用数据库,那么您只是在做 PHP 在脚本结束时无论如何都会做的事情。
【讨论】:
是的,使用后关闭连接是一种很好的做法,它可以减轻数据库的负担。性能会有所提高。 资源使用完毕后,应始终释放资源,以供其他用户使用。
【讨论】:
如果您的意思是使用持久连接:通常(99.99% 的时间)使用持久连接不是(!)非常明智的做法。当然不是在使用事务时。每个请求打开和关闭连接的性能损失并不大。
PHP 持久连接不好,因为...
- 它们会导致事务、表锁、临时表、会话变量和 MySQL 中的大多数其他有用功能非常危险,可能会在页面生成期间导致服务器范围的死锁和数据库错误。
- 它们占用了数百个 MySQL 套接字和线程,增加了在某处达到限制的风险(打开文件、mysql 设置、内核限制?)。
- 当某些东西因为持久连接而中断时,诊断肯定是极其困难的,因为它只会在某个线程以某种顺序处理了某些请求后才会出现。
- 有了一个网络服务器池,一个慢速网络服务器可以备份并消耗太多无法使用的连接,以至于其他服务器无法创建连接来完成它们的请求。
例如看这篇文章。
http://meta.wikimedia.org/wiki/Why_persistent_connections_are_bad
一般来说,尽快显式释放您获得的所有资源也是一种很好的编程习惯,因为它们可以被竞争的例程脚本使用。使用构造函数和析构函数(“智能资源”)是一种很好的方法。在 PHP 中,您的脚本可能以致命错误结束,在这种情况下您没有机会自己释放它们。
【讨论】:
$conn = new mysqli("localhost","Username","Password","Db_name");
$sql = "SELECT * FROM `your_table_name`";
$connStatus = $conn->query($sql);
$numberOfRows = mysqli_num_rows($connStatus);
$numberOfRows;
//this echo out the total number of rows returned from the query
$conn->close();
【讨论】: