mysql bağlantısı

6 Cevap php

Mysql bağlantısı için bu kodu kullanarak Im

$con = mysql_connect("localhost:/var/lib/mysql/mysql.sock", "abc" , "xyz");
if (!$con)
{
    die('Could not connect: ');
}
mysql_select_db("database_name", $con);

Im including this file on the top of every php file that im using for parsing and then storing the data in database.Now when the original site gets down then my parsing files starts giving error "Warning: mysql_connect(): Too many connections in /home/clickindia/public_html/appuonline/db.php on line 2 Could not connect:"

Ne ben bu i mysql_close ($ con) kullanmanız gerektiğini düşünüyorum errors.Do siteme kurtarmak için ne yapmalıyım; Ama nasıl ve nerede?? Benim kod kalıp kullanarak Im doğru olduğunu ya da ben yardım plz vb yakın kullanmalısınız!

6 Cevap

Eğer "her php dosyasının üstüne" bu bağlantı kodu koymak demek.

Benim soru: Eğer tek bir sayfa için bu dosyaların birkaç kullanabilirim?

Bu durumda ise, o zaman bir sayfa için yalnızca bir kez bağlantıyı açmak gerekir. Bu hata açıklaması olabilir.

Artem en tavsiyelerde de ilgili bulunmaktadır.

Bu gerçekten bir sysadmin sorun - Eğer sistem yöneticisi başvurmalısınız. Eğer yapılandırmasını yönetmek adanmış web host ve özel veritabanı barındırma varsa, bu iki bariz çözümler vardır:

  1. Max_connections artırın
  2. Daha az tüketmek için uygulamanızı yeniden yapılandırın

Her sayfada bağlanmak Web sunucuları, bir sürü kullanabilirsiniz.

Sen veritabanı erişimi etrafında singleton'ununu sarma düşünebilirsiniz. Yararları:

  • Yalnızca bir bağlantıyı kullanabilirsiniz.
  • Bunu (yerine keyfi olarak her sayfada bağlantı) ihtiyacınız varsa sadece bir bağlantı açın.

Kendi singleton rulo veya bir çerçeveden bir tane alabilirsiniz, bu üzerinde çalıştığınız ne bağlı overkill olabileceğini düşündüm. Temelleri bu gibi bir şey olacaktır:

class DatabaseAccess {
     private static $instance;
     private $connection;

     //declare the constructor private so we can only use it in this class
     private function __construct( $host, $user, $pass, $db ) {
         $this->connection = mysql_connect( $host, $user, $pass );
         mysql_select_db( $db, $this->connection );
     }

     //provide access to a single instance
     public static function instance() {
         if ( ! isset( self::$instance ) ) {
             self::$instance = new DatabaseAccess('host', 'user', 'pass', 'db');
         }
         return self::$instance;
     }

     //functions to execute/query the db
     public function query( $query ) {
         return mysql_query( $query, $this->connection );
     }

}

Ben bu rota aşağı gitmek olsaydı, muhtemelen mysqli'nin bir örneğine erişim kontrol ederek bunu yapmak ve kullanmak doğrudan ziyade mysql_ * işlevleri kaydırmak istiyorum. Sen wikipedia tekiz desen hakkında daha fazla bilgi bulabilirsiniz.

Sizin uygulama daha sonra bu gibi sınıf ile çalışmak:

$dba = DatabaseAccess::instance();
$result = $dba->query('select * from pages');
mysql_fetch_assoc($result);
//blah blah blah

Umarım ki olur!

  1. Özellikle üretim üzerinde değil, display errors halka yapın.

  2. exceptions yerine die arasında kullanın.

  3. Incelikle hataları Kolu - Bu tür # 1 ile el ele gider. Sadece ölmek etmeyin - bir hata sayfasına yönlendirme veya geçici "verileri kaydetmek olamazdı" mesajı gösteriyor.

  4. MySQL köle kurmak ve eğer o sorgulamak. Çoğaltma her zaman (belli bir dereceye kadar) istikrar ve tek bir başarısızlık noktaları size yardımcı olacaktır.

MySQL bu istemci (bu durumda php istemci kütüphanesi) verebileceğiniz bağlantı sayısına bir sınırlama yaşıyor.

mysql_connect () yeni bir bağlantı (lar) açarak ve bir yaşlı kapanış değildir. Bu sorunu çözmek için mysql_pconnect kullanabilirsiniz. Take a look @ this function documentation of mysql pconnect

Ayrıca mysql_pconnect kullanabilirsiniz:

Bir MySQL sunucuya kalıcı bir bağlantı kurar.

mysql_pconnect () iki önemli farklılıklar () mysql_connect gibi çok davranır.

  • It will try to reuse an open connection that is the same.

  • It will not close the connection at the end of the script.