web-dev-qa-db-ja.com

mysqli接続を閉じる前に開いているかどうかを確認する方法

mysqli_close($connection)を使用して$connectionを閉じます。しかし、閉じる前に、関係する接続が開いていることを確認する必要があります。

私は試した

if($connection)
{
  mysqli_close($connection);
}

しかし、それは機能していません。解決策はありますか?

16
Munib

古い質問ですが、他の誰かを助けるかもしれません。これは PHP.net からです。

オブジェクト指向スタイル

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}

/* check if server is alive */
if ($mysqli->ping()) {
    printf ("Our connection is ok!\n");
} else {
    printf ("Error: %s\n", $mysqli->error);
}

/* close connection */
$mysqli->close();
?>

手続き型

<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

/* check if server is alive */
if (mysqli_ping($link)) {
    printf ("Our connection is ok!\n");
} else {
    printf ("Error: %s\n", mysqli_error($link));
}

/* close connection */
mysqli_close($link);
?>
27
user2060451

$connection->ping()$connection->stat()またはmysqli_thread_id($connection)を確認することを提案する人もいますが、3人は 'Couldn't fetch mysqli '接続が以前に閉じられていた場合。

私のために働いた解決策は次のとおりでした:

if(is_resource($connection) && get_resource_type($connection)==='mysql link'){
    $connection->close(); //Object oriented style
    //mysqli_close($connection); //Procedural style 
}

PS:制御されたコンテキストでは、 resource である場合にのみチェックできます。

4

接続を開くと、明示的に閉じられるか、スクリプトが終了するまで開いたままになります(永続的な接続がオンになっていない限り)。あなたが持っているコードを使用して動作するはずです。

1つのオプションは、mysqliクラスを拡張し、$connectedと呼ばれるステータスプロパティを持つことです。

class CustomMysqli {
  public $connected;

  public function __construct($Host, $username, $password, $dbname) { // db info
    $conn = new mysqli($Host, $username, $password, $dbname);

    if (!$conn->connect_errno) {
      $this->connected = true;
    }

    return $conn;
  }

  public function close($conn) {
    if ($this->connected) {
      $conn->close();
      $this->connected = false;
    }
  }
}

$connectedプロパティの確認は少しやり過ぎですが、接続がまだ開いていることを確認します。

3
Chris Bornhoft

接続エラーを確認してください。 mysqli_connect()は常にMySQLiオブジェクトを返します。

これを使って:

$mysqli_connection = new MySQLi('localhost', 'user', 'pass', 'db');
if ($mysqli_connection->connect_error) {
   echo "Not connected, error: " . $mysqli_connection->connect_error;
}
else
{
   echo "Connected.";
}
1
hamid

これを試して:

function close_connection(){
    $thread = $mysqli->thread_id;
    $mysqli->close();
    $mysqli->kill($thread);

}

これにより、次のようなオブジェクト指向スタイルを使用して開いた接続が閉じられます。

$mysqli = new mysqli($db_server, $db_username, $db_password, $db_name);

これが基本的な考え方ですが、手続き型のスタイルを使用している場合は、必要に応じてコードをカスタマイズできると確信しています。

0
Hazem_M