PHP:使用外部连接文件时关闭mysql连接

时间:2013-03-22 09:55:26

标签: php mysql database-connection

所以大多数基本的php / mysql示例都显示了这样的内容(取自W3 Schools作为一个非专业人士的例子):

<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

$result = mysqli_query($con,"SELECT * FROM Persons");

while($row = mysqli_fetch_array($result))
  {
  echo $row['FirstName'] . " " . $row['LastName'];
  echo "<br />";
  }

mysqli_close($con);
?>

使用外部连接文件时,关闭连接的正确方法是什么(如果需要的话)。

EG。我们将上面的内容分成一个包含

的connection.php文件
  <?php
    $con=mysqli_connect("example.com","peter","abc123","my_db");
    // Check connection
    if (mysqli_connect_errno())
      {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
      }

?>

然后有一个包含以下内容的Query.php文件:

<?php
require('connection.php');
$result = mysqli_query($con,"SELECT * FROM Persons");

    while($row = mysqli_fetch_array($result))
      {
      echo $row['FirstName'] . " " . $row['LastName'];
      echo "<br />";
      }
 ?>

是否需要关闭连接。如果在query.php文件的末尾有mysqli_close($con);,或者它是否在connection.php文件的末尾,并且有某种方式来链接query.php文件将在之前运行连接已关闭?

和/或是否正在关闭连接?它是在脚本完成后自动关闭的吗?

2 个答案:

答案 0 :(得分:2)

在脚本执行结束时会自动销毁打开的连接(和类似的资源)。但是,您应该在不再需要时立即关闭或释放所有连接,结果集和语句句柄。这将有助于更快地将资源返回到PHP和MySQL。

但是,如果您的PHP脚本需要花费大量时间来执行,那么当您不再需要对数据库发出任何请求时,最好关闭连接 - 至少,如果长时间计算完成之后查询。

如果您的应用程序部署在共享主机上,则尤其如此:您的用户帐户通常只能同时打开几个连接。 (在共享主机上,同时打开的连接数量可能非常小;私有服务器上的连接数通常更大。)

我们经常不关闭联系的原因是:

  • 我们通常不知道我们何时完成了所有查询 - 对于由大量小的页面组成的页面尤其如此 “块”;每一个都独立于其他人,并且可以 自己做查询;那么,我们何时可以关闭连接?
  • 网页的生成速度通常很快,所以我们并不是真的 关闭关闭与DB的连接。

我认为这可以帮助您解决问题。

答案 1 :(得分:0)

最好使用一个可能扩展Mysqli的类,即:

<?php

    // Database class
    class Database extends \mysqli
    {
        public function __construct($host, $user, $pass, $db)
        {
            //create connection
        }

        public function __destruct()
        {
            //close connection
            //will call this function when class closes or PHP stops
        }
    }

    //using the database
    $db = new Database('localhost', 'user', 'pass', 'db');
    $db->query("SELECT ....");