Nasıl verimli, her sorguda reconnecting olmadan php mysql bağlanmak yok

2 Cevap php

Benim kod ben (mysql bağlantıları bir kolu olarak bir oturumda etrafında geçti olamayacağı gerçeği gibi) php hakkında yeni şeyler öğrenmek her zaman yeniden yazmak zorunda oldukça sıkıldım.

Nasıl projelerde mysql bağlantı uygulamak? Bir çok insan "bağlantı havuzu" önerdi, ancak kılavuzu okuduktan sonra ben hala kayboldum. Bu gibi: "bağlantı havuzu mysql_pconnect olduğunu!" - Bana: "?? Ve ... nasıl gerçekte herhangi bir farklı neden bu görünüşte gizemli aura bir oturumda bir mysql_pconnect etrafında geçebilir ki?"

Bana durumu açıklayayım. Ben "sorgu1" adında bir işlevi var:

function query1($query)
{
    $db = new mysql(HOST,USER,PASS,DBNAME);
    $result = $db->query($query);
    $db->close();
    return $result;
} 

Bu (eğer mysql_real_escape_string gibi işlevler için bir mysql tanıtıcı gerekir beri especially) bir db sorgulamak squanderous ve verimsiz bir yol gibi görünüyor olduğunu. What is the correct form to do it? Can someone please help me?

Ben gerçekten çok iyi ve dürüst bir cevap takdir ediyorum teşekkür ederim.

2 Cevap

Normalde bir sayfa yük kez bağlamak istiyorum. AKA

class Database{
    public function connect()
    {
         $this->connection = mysql_connect();
    }

    // This will be called at the end of the script.
    public function __destruct()
    {
        mysql_close($this->connection);
    }

    public function function query($query)
    {
        return mysql_query($query, $this->connection;
    }
}
$database = new Database;
$database->connect();

$database->query("INSERT INTO TABLE (`Name`) VALUES('Chacha')");

Temel olarak, sayfanın başında bağlantıyı açmak son sayfasında kapatın. Sonra sayfa boyunca çeşitli sorguları yapabilir ve bağlantı için bir şey yapmak zorunda değilsiniz.

Erik önermek gibi bile yapıcısındaki mysql_connect yapabilirdi.


Global değişkenleri (küresel durumu yaratır olarak önerilmemektedir) kullanarak yukarıdaki kullanmak için, gibi bir şey yapacağını

Global $db;

$db = new Database;
// ... do startup stuff

function doSomething()
{
    Global $db;
    $db->query("Do Something");
}

Oh, ve hiç kimse bir parametre etrafında geçmek zorunda değilsiniz bahsetti. Sadece bağlantı

mysql_connect();

Sonra, mysql_query sadece olursa olsun kapsamı ne son bağlantısı kullanır.

mysql_connect();

function doSomething()
{
    mysql_query("Do something");
}

Yorumlarına göre:

I mysql_connect () bağlantı havuzu kullanmak değil çünkü sen, yerine mysql_connect (of mysql_pconnect ()) kullanmak gerektiğini düşünüyorum. - Nightcoder

Eğer mysql_connect veya mysql_pconnect kullanmak olmadığını düşünebilirsiniz. Ancak, yine de sadece bir kez komut başına bağlamak gerekir.

Her fonksiyonu veritabanına bağlanmak gerekmez. Eğer betik çalışmaya başladığında veritabanına bağlanmak ve küresel devlet bağlantı nesnesi kaydetmek gerekir. Herhangi bir fonksiyon size veritabanını sorgulamak için bağlantı nesnesini kullanabilirsiniz. Sizin bağlantı nesnesi komut dosyası çalıştırıldığında her zaman için yeniden olacak ama özel bağlantı havuzu sahne arkasında kullanılır, yani aslında bağlantı bile kırılmış değil çünkü bağlantı, mikrosaniye meselesi (anında yapılacaktır, çünkü çok hızlı olacak, öyleydi ) bağlantı havuzunda kurtardı.

İşte size sorulan örnek:

// this code should be executed on every page/script load:
$adoConn = ADONewConnection(...);
$adoConn->PConnect(...);

// ...

//And then in any place you can just write:
global $adoConn;
$adoConn->ExecuteNonQuery("INSERT INTO test SET Value = 'Hello, world!'");

Sorunuza gelince "nasıl bağlantı havuzu uygulamak yoktur". Sen yok. Bu sahnenin arkasında sunucu tarafından korunur ve (veya PHP ile çalışmak için PHP kütüphanesi) mysql_pconnect () işlevini kullanmak durumunda kullanılır.

PS. Eğer global bir değişken (değilim) gibi $ adoConn tutmak için korkuyor iseniz o zaman statik özelliğe sahip bir sınıf oluşturabilirsiniz:

class DB
{
  public static $adoConn;
}

// ...

DB::$adoConn->ExecuteNonQuery(...);