ve veritabanı MySQL
C mysql API:
my_bool reconnect = 0; mysql_options(&mysql, MYSQL_OPT_RECONNECT, &reconnect); See http://dev.mysql.com/doc/refman/5.6/en/auto-reconnect.html
From PHP mysqli in php.ini set the global: mysqli.reconnect = On See http://www.php.net/manual/en/mysqli.configuration.php#ini.mysqli.reconnect
For the PHP PDO mysql driver it should be available through PDO::setAttribute but I am unable to find documentation indicating that it is implemented. The code appears to be attempting to respect the MYSQL_OPT_RECONNECT which is now required by mysql but to have failed to do so in the initial implementation (https://bugs.php.net/bug.php?id=58863). The intent of the patch in 58863 is to allow: new PDO('mysql:host=xxx', 'xx', 'xx',array(PDO::MYSQL_OPT_RECONNECT=>true));
Yeniden bağlanma oluşur neden Bunun çeşitli sebepleri vardır ama bağlantıların bir havuza dizi nedeniyle kullanım eksikliği doldu olgun bir bağlantısı içeren yaygın çünkü. 8 saat sonra, varsayılan MySQL bağlantı zaman aşımı tarafından. Bkz: http://dev.mysql.com/doc/refman/5.6/en/gone-away.html
Bir reconnection See yan etkileri için: http://dev.mysql.com/doc/refman/5.6/en/auto-reconnect.html
Sen bağlantı durumunu test ve döndüğünde yeniden için mysql_ping() işlevini kullanabilirsiniz false
. Bu dokümantasyon sayfasında belirtildiği gibi 5.0.13 önce bir MySQL kullanıyorsanız () bile sizin için yeniden edecek mysql_ping; "MySQL 5.0.13 yana, otomatik yeniden bağlanma özelliği devre dışı.".
MySQL bağlantısı çok kez açıldığında Bazen, DB bağlantısı olmadan sorguya zaman my.cnf WAIT_TIMEOUT değerini excedes zaman bırakılır. Sen aşımı hatası "MySQL server has gone away" alırsınız.
Bu benim kod otomatik yeniden bağlanma uygulamak nasıl:
class databaseClass {
var $conn;
var $db;
public function __construct() {
$this->connect();
}
public function connect() {
$this->conn = mysql_connect(DB_HOST, DB_USER, DB_PASS);
$this->db = mysql_select_db(DB_NAME, $this->conn);
}
public function disconnect() {
mysql_close($this->conn);
}
public function reconnect() {
$this->disconnect();
$this->connect();
}
public function queryCompanyExist($company) {
//auto reconnect if MySQL server has gone away
if (!mysql_ping($this->conn)) $this->reconnect();
$query = "SELECT name FROM company WHERE name='$company'";
$result = mysql_query($query);
if (!$result) print mysql_error() . "\r\n";
return mysql_fetch_assoc($result);
}
}
mysql_ping hakkında daha fazla bilgilenmek için buraya bakınız
Sen bağlantısı üzerinden ve durumda aşağı, yeniden yeniden ve daha sonra sorgu ya da ne istersen devam veritabanını ping olacak bir işlev yazabilirsiniz, ayrıca mysqli php kütüphanesinden bir göz atın, bu yararlı olabilir Senin için.
PS. Ayrıca veritabanına bağlanmak bir kez oluşturulan veritabanı bağlantısı, korumak ve daha sonra her zaman ben yukarıda açıklanan onay ile devam edecek getConnection denilen yöntemi uygulayabilirsiniz için Singleton design pattern uygulamak yararlı olabilir .
PPS. Sen, bir istisna kullanmak bir istisna yakalamak başarısız olduğunda, sorgu sizi denemek, yeniden ve tekrar deneyebilirsiniz.
Ilk etapta neden "yeniden" gerekiyor? Nasıl / neden kesilir alıyorsanız? PHP Eğer script başında bağlayın ve bağlantı yazısının sonunda otomatik olarak kapatılır.
Tüm adresinden komut mysql_close
aramak için (ve bunu açıkça bağlantıyı kapattı eğer "otomatik olarak yeniden" saçma olurdu) gerek yok.
Sen mysql_pconnect Eğer bu sizin için ne arıyorsanız var olduğunu deneyebilirsiniz. Daha sonra bağlantı sürekli açık kalacak ve bağlanmak diğer komut bağlantısını kullanabilirsiniz.