Bağlantıyı kapatmadan sırasında sınıfta bağlantı değişken hata oluşturur

1 Cevap

Aşağıda benim DB bağlantı sınıftır. "Bilinmeyen MySQL localhost": Sorun benim kodundan CloseConnection işlevi erişmeye çalıştığınızda, bu hata veriyor olmasıdır. Benim diğer kod dosyaları aracılığıyla "dbconnection :: CloseConnection" kullanın. Bu başarıyla bağlantısını açma, ama "$ Bağlan" hatası veriyor.

final class dbconnection 
{

    private $conn;
    	//Opens connection for a MySQL DB
    	public static function OpenConnection()
    	{
    		require("../Config/dbconfig.php");
    		$conn = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);

    		mysql_select_db('MyDB');  

    	}

    	//Closes connection for a MySQL DB
    	public static function CloseConnection()
    	{
    		mysql_close($conn);

    	}
}

Aşağıda yukarıda belirtilen işlevlere erişim yerden başka bir PHP dosyasında bir yöntemdir:

public static function InsertRecord($inQuery)
{
     dbconnection::OpenConnection();
     $resultSet = mysql_query($inQuery);
     dbconnection::CloseConnection();
     return $resultSet; 	
}

Ben hat "DbConnection :: CloseConnection ()" kaldırdığınızda, iyi çalışıyor. Ben de DB görev bitmiş gibi hemen bağlantısını kapatmak için, ya da kullanım tarayıcıyı kapatır kadar ben onu açık tutmak gerektiğini iyi bir uygulamadır olup olmadığını bilmek istiyorum?

1 Cevap

Deneyin:

class dbconnection  {
  private static $conn;

  public static function OpenConnection() {
    require("../Config/dbconfig.php");
    self::$conn = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);
    mysql_select_db('MyDB');  
  }

  public static function CloseConnection() {
    mysql_close(self::$conn);
  }
}

Ne yapıyoruz üye değişkeni $conn erişmeye çalışıyor ama sadece kullanmak için yeni bir (yerel) değişken oluştururken böylece yanlış yapıyorsun. Bu açık üzerinde önemli değil (referans sadece atılır) ama yakın size artık bir kaynak başvuru ile ilgili değiliz.

İkinci olarak, fonksiyonlar statik olan ancak üye değişken değildir. Bunlar üye değişkenleri erişmek için kullanabileceğiniz iki yöntem vardır:

class A {
  private $a;
  private static $b;

  public static function foo() {
    $this->a = 3; // instance member
    self::$b = 4; // static member
  }
}

Edit: son işlevi konusunda, o artık $conn (yerel değişkeni ile veritabanı bağlantısı erişmeye çalışıyor çünkü CloseConnection() için çağrı kaldırmak çalışır hangi bir hataya neden olur).

Hayır hemen bir veritabanı bağlantısını kapatmak için iyi bir uygulama değildir. PHP en yaygın uygulama senaryonun üstünde bir bağlantısı açmak ve daha sonra hiçbir şey yapmak için basitçe. Script çıkmadan zaman kapanacak. Bunu anlamı Bazı insanlar talebe açık bağlantıları, bu bir ihtiyacı kadar bir tane oluşturmak için çalışacağız olmaz. Bu (gereksiz karmaşıklığı ekleyerek değil bakış noktasından) kabul edilebilir bir iyileştirmedir. Genellikle bağlantı açıkça kapatılıncaya asla. Script sona erdiği örtülü kapalı olacaktır.

Uzun ömürlü komut gereksiz yere uzun süreler boyunca açık bağlantıları tutmayın sadece bu yüzden farklı bir yaklaşım almak isteyebilirsiniz.

Bazı noktada yerine kalıcı bağlantıları kullanmak isteyebilirsiniz.

Yukarıdaki yöntem bazı oldukça büyük siteler için yeterince basit ve yeterli yeterlidir. Genel bir kural olarak, aslında hakkında bir şeyler yapmak gerekiyor bir sorununuz kadar bu şeyleri optimize ve gereksiz karmaşıklığı tanıtmak için çalışmayın.