63

PHPの組み込みMySQL関数だけを使用してPHPでMySQL接続を開くと、次のようになります。

$link = mysql_connect($servername, $username, $password);
mysql_select_db($dbname);
//queries etcetera
mysql_close($link);

PDOとの接続を開くと、次のようになります。

$link = new PDO("mysql:dbname=$dbname;host=$servername",$username,$password);
//prepare statements, perform queries

およびと同じように、接続を明示的に閉じる必要がmysql_connect()ありmysql_close()ますか?そうでない場合、PHPは接続が完了したことをどのように認識しますか?

TIA。

4

6 に答える 6

78

$link = null接続を閉じることができることをPDOに通知するために使用します。

PHP:PDO接続と接続管理

データベースへの接続が成功すると、PDOクラスのインスタンスがスクリプトに返されます。接続は、そのPDOオブジェクトの存続期間中アクティブのままです。接続を閉じるには、オブジェクトへの残りのすべての参照が削除されていることを確認してオブジェクトを破棄する必要があります。これを行うには、オブジェクトを保持する変数にNULLを割り当てます。これを明示的に行わないと、スクリプトが終了したときにPHPが自動的に接続を閉じます。

于 2009-06-25T23:01:33.983 に答える
13

PDOはそれ自体ではそのような機能を提供しません。PDOを介した接続は、PHPのPDOオブジェクトrefcountを介して間接的に管理されます。

ただし、refcountに関係なく、とにかく接続を閉じたい場合があります。制御できないため、テスト目的などで必要になります。

SQLクエリを実行することにより、PDOとのMysql接続を閉じることができます。Mysqlサーバーに接続できるすべてのユーザーはKILL、少なくとも独自のスレッドに接続できます。

/*
 * Close Mysql Connection (PDO)
 */

$pdo_mysql_close = function (PDO $connection) {

    $query = 'SHOW PROCESSLIST -- ' . uniqid('pdo_mysql_close ', 1);
    $list  = $connection->query($query)->fetchAll(PDO::FETCH_ASSOC);
    foreach ($list as $thread) {
        if ($thread['Info'] === $query) {
            return $connection->query('KILL ' . $thread['Id']);
        }
    }
    return false;
};

$pdo_mysql_close($conn);

関連するMysqlドキュメント:

関連するStackoverflowの質問:

于 2013-01-01T18:34:38.493 に答える
11

PHPスクリプトの実行が終了すると、すべての接続が閉じられます。また、との接続を明示的に閉じる必要はありませんmysql_close()

于 2009-06-25T23:01:56.603 に答える
5

接続をローカル関数内に制限することもできます。そうすれば、機能が完了するとすぐに接続が閉じられます。

于 2010-10-28T12:57:16.933 に答える
1

PDOのforにオブジェクトが割り当てられていることをよく$link理解すると、PHPは、スクリプトが実行されるとすぐにそれをnullに設定して、オブジェクトではなくなるようにします。したがって、次のことができます。

$link = new PDO("mysql:dbname=$dbname;host=$servername",$username,$password);

//prepare statements, perform queries

$link = null;
于 2013-07-04T21:17:36.160 に答える
0

http://uk3.php.net/pdo

私が集めたものから、私はとにかくそれを閉じるためにphpマニュアルで見ることができませんでした、そして私がすぐに見たスクリプトの例は私が見ることができたものからとにかく接続を決して閉じませんでした。

于 2009-06-25T23:03:24.273 に答える