Bu PHP sınıfı mysql veritabanı erişimi için optimize edilmiş midir?

1 Cevap php

Ben bir mysql veritabanına erişimi kolaylaştırmak için hızlı bir PHP sınıfı yazdı ettik. Sınıf Tamam çalışır, ve, bağlantı açılır sorgu yürütür ve sonra bağlantıyı (I bağlantı komut dosyası tamamlandıktan sonra PHP'nin kendisi tarafından kapatılması gerekiyordu olduğunu biliyorum, ama ben sevmiyorum kapatan bir sorgu () yöntemi vardır ) bu konuda çok güveniyor.

Bir performans açısından, ben, hep ben bir sorguyu yürütmek her zaman ben () girişini süzmek için mysql_real_escape_string kullanmaya çalıştığınızda, bu işe yaramazsa da çok iyi bir uygulama olduğu (ve olmayabilir bir veritabanına bir bağlantı açarak biliyorum etkin veritabanı bağlantısı) var çünkü. Ama ben bu konuda daha fazla açıklık olmak istiyorum. Bunu yapmak çok yanlış mı? Neden? Ve ben de bu iyi alternatifler hakkında bilmek istiyorum.

İşte bir sınıf:

class DB {

private $conn;

//database data
private $dbhost;
private $dbname;
private $dbuser;
private $dbpass;

/**
 * Constructor
 * @dbhost string the database host
 * @dbname string the database name
 * @dbuser string the database username
 * @dbpass string the database password
 */
public function __construct ($dbhost, $dbname, $dbuser, $dbpass)
{
    $this->dbhost = $dbhost;
    $this->dbname = $dbname;
    $this->dbuser = $dbuser;
    $this->dbpass = $dbpass;
}

/**
 * Connects to mysql database
 */
private function open ()
{
    $this->conn = mysql_connect ($this->dbhost, $this->dbuser, $this->dbpass)
    or die ("Error connecting to database");

    mysql_select_db ($this->dbname) or die ("Error selecting database");
}

/**
 * Closes the connection to a database
 */
private function close ()
{
    mysql_close($this->conn);
}

/**
 * Executes a given query string
 * @param string $query the query to execute
 * @return mixed the result object on success, False otherwise
 */
public function query ($query)
{   
    $this->open();
    $result = mysql_query($query, $this->conn)
    or die ("Error executing query ".$query." ".mysql_error());

    $this->close();
    return $result;

}

}

1 Cevap

(Ben bağlantı komut dosyası tamamlandıktan sonra PHP'nin kendisi tarafından kapatılması gerekiyordu olduğunu biliyorum, ama ben bu konuda çok güvenmek sevmiyorum).

Neden? Bu dil bir özelliğidir. Güven için hiçbir neden yok. Web siteleri bir sürü kendi şeyler kapatmak için PHP üzerinde sadece iyi sayma yayınlanıyor. Programcılar olarak, elbette, biz kendimizi kapatmak istiyor. Bu iyi. Ancak açılış ve her sorgu için bir veritabanı bağlantısını kapatma bir horrible fikirdir. Bunu yapmak için daha iyi bir yolu yapıcınızdan open() diyoruz ve yeniden adlandırmak için sizin close() __destruct() . According to the documentation, __destruct "olarak adlandırılan edilecektir yakında belirli bir nesneye tüm başvurular kaldırıldı veya nesne açıkça tahrip olduğunda ya da kapatma sırası herhangi bir sırayla gibidir. " Veritabanı bağlantısı için kapanış kodunu saklamak için ideal bir yer gibi geliyor.