mysqli(mysql) 데이터베이스 ?시간마다 디비재접속
프로그램 자체는 어렵지 않습니다.
백그라운드로 프로그램을 오래 실행하다 보면 데이터베이스 연결이 끊히게 됩니다.
이때문에 디비에서 끊어질 시간보다 이전에 현재 연결을 끊고 재접속을 할 필요가 있는 경우 필요한데요.
때론 데이터의 양에 따라서 몇 일씩 걸리는 경우도 있기도 합니다.
아래에서는 재접속 하는 부분만 참고하면 되겠습니다.
지정한 시간 이내이면 기존 접속을 그대로 사용하고 그렇지 않으면 재접속한것을 리턴해 주는 간단한 방식 입니다.
class DatabaseConnection {
private static $instance = null;
private static $oMysqli = null;
private static $mysqliConDate = null;
// 데이터베이스 연결 정보
const DB_HOST = 'localhost'; // 데이터베이스 호스트
const DB_USER = 'username'; // 데이터베이스 사용자 이름
const DB_PASSWORD = 'password'; // 데이터베이스 비밀번호
const DB_NAME = 'database_name'; // 데이터베이스 이름
// 생성자는 private으로 선언하여 외부에서 인스턴스를 생성하지 못하도록 함
private function __construct() {}
// 싱글턴 패턴을 사용하여 오직 하나의 인스턴스만 생성
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
// 데이터베이스에 연결하는 메소드
public static function dbConMysqli($mode = null) {
$currentTime = strtotime(date('Y-m-d H:i:s'));
if ((self::$mysqliConDate === null) || (($currentTime - strtotime(self::$mysqliConDate)) >= 3600 * 8)) {
if (self::$oMysqli) {
mysqli_close(self::$oMysqli);
}
self::$oMysqli = self::createConnection();
self::$mysqliConDate = date('Y-m-d H:i:s');
}
return self::$oMysqli;
}
// 실제 데이터베이스 연결을 생성하는 메소드
private static function createConnection() {
$oMysqli = new mysqli(self::DB_HOST, self::DB_USER, self::DB_PASSWORD, self::DB_NAME);
if ($oMysqli->connect_error) {
die('Connect Error (' . $oMysqli->connect_errno . ') ' . $oMysqli->connect_error);
}
return $oMysqli;
}
}
// 사용 예시
$db = DatabaseConnection::getInstance()->dbConMysqli();