PHP PDO ile açılan SQL bağlantıları kapalı olması var mı

6 Cevap php

Ben sadece PHP'nin yerleşik MySQL fonksiyonları, ben aşağıdakileri yapın PHP ile MySQL bağlantısını açtığınızda:

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

Ben PDO ile bağlantı açtığınızda, bu gibi görünüyor:

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

Ben mysql_connect() ve mysql_close() ile yapmak gibi açıkça bağlantıyı kapatmak zorunda mıyım? Eğer değilse benim bağlantı ile işim bittiğinde, nasıl PHP biliyor mu?

TIA.

6 Cevap

$link = null PDO bu bağlantıyı kapatabilirsiniz bildirmek için kullanın.

PHP: PDO Connections & Connection Management

Veritabanına başarılı bağlantı kurulduğunda, PDO sınıfının bir örneği Betiğinize döndürülür. Bağlantı PDO nesnesinin ömrü boyunca aktif kalır. Bağlantıyı kapatmak için, ona kalan tüm başvurular silindiğinden emin olarak nesneyi yok etmek gerekir - nesneyi tutan değişkene NULL atayarak yapabilirsiniz. Açıkça bu yapmazsanız sizin script sona erdiği, PHP otomatik bağlantıyı kapatır.

PDO kendi başına böyle bir işlev sunmuyor. PDO Bağlantılar dolaylı PHP RefCount PDO nesneler aracılığıyla yönetilmektedir.

Ama bazen ne olursa olsun RefCount arasında zaten bağlantıyı kapatmak istiyor. Bunu kontrol edemez, çünkü ya, test amacıyla veya benzeri için lazım.

PDO ile Mysql bağlantısını kapatabilirsiniz by running a SQL query. Every user that is able to connect to the Mysql server is able to KILL, en azından kendi ipliğini:

/*
 * 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);

İlgili Mysql Belgeler:

İlgili Stackoverflow Sorular:

PHP komut dosyası yürütme tamamlandığında, tüm bağlantılar kapatılır. Ayrıca açıkça mysql_close() ile bağlantıyı kapatmak zorunda değilsiniz.

Ayrıca, yerel fonksiyonları içinde bağlantıları için sınırlayabilir. Bu şekilde bağlantı kısa sürede işlev tamamlandıktan olarak kapatılır.

http://uk3.php.net/pdo

I ne toplamak i php kılavuzda kapatmak için yine göremiyordu ve ben hızlı baktı komut örnekleri i görebildiğim kadarıyla zaten bağlantıyı kapattı asla.

Peki PDO için $link olarak gören bir nesne atanır, PHP gibi kısa sürede komut artık bir nesne o kadar çalışır gibi boş olarak ayarlamak olacaktır. Bu nedenle, sadece yapabileceği:

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

//prepare statements, perform queries

$link = null;