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 />";
      }
 ?>

接続を閉じる必要がありますか?query.phpファイルの最後にある必要がありますmysqli_close($con);か、それともconnection.phpファイルの最後にあり、接続が閉じられる前にquery.phpファイルが実行されるようにリンクする何らかの方法がありますか?

および/または接続を閉じる必要がありますか?スクリプトが完了した後、自動的に閉じますか?

4

2 に答える 2

2

開いている接続(および同様のリソース)は、スクリプトの実行が終了すると自動的に破棄されます。ただし、すべての接続、結果セット、およびステートメントハンドルは、不要になったらすぐに閉じるか解放する必要があります。これにより、リソースをPHPとMySQLにすばやく戻すことができます。

それでも、PHPスクリプトの実行に時間がかかる場合は、データベースへの要求が不要になったときに接続を閉じることをお勧めします。少なくとも、クエリの後に長い計算が行われる場合はそうです。

これは、アプリケーションが共有ホスティングにデプロイされている場合に特に当てはまります。ユーザーアカウントでは、通常、同時に開くことができる接続はごくわずかです。(同時に開かれる接続の数は、共有ホスティングではかなり少なくなる可能性があります。一般に、プライベートサーバーでは多くなります)。

私たちが自分自身で接続を閉じないことが多い理由は次のとおりです。

  • 通常、すべてのクエリをいつ実行したかはわかりません。これは、多くの小さな「ブロック」で構成されているページに特に当てはまります。それらのそれぞれは他から独立しており、独自にクエリを実行できます。では、いつ接続を閉じることができますか?
  • Webページは通常、生成が非常に高速であるため、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 に答える