0

因此,大多数基本的 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);
?>

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

例如。我们将上面的内容分成一个 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 />";
      }
 ?>

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

和/或是否需要关闭连接?脚本完成后它会自动关闭吗?

4

2 回答 2

2

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

尽管如此,如果您的 PHP 脚本需要大量时间来执行,那么当您不再需要对数据库进行任何请求时关闭连接是一个好主意——至少,如果在查询之后完成了长时间的计算。

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

我们自己经常不关闭连接的原因是:

  • 我们通常不知道我们什么时候完成了所有查询——对于由许多小“块”组成的页面尤其如此;它们中的每一个都是独立于其他的,并且可以自己进行查询;那么,我们什么时候可以关闭连接?
  • 网页的生成速度通常非常快,因此我们并不真正关心关闭与 DB 的连接。

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

于 2013-03-22T10:18:52.473 回答
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 ....");
于 2013-03-22T10:16:24.470 回答