Я новичок в PHP высоком уровне. Но не новичок в программировании.PDO disconnect и ссылка на переменную PHP
У нас есть программное обеспечение (в делении, но все еще активное), которое убивает нашу БД.
Внутри используется PDO проблема после много потраченного времени, это режим отключения PDO и использование PDO внутри класса переноса.
public function connect() {
if(!$this->connected){
$col = 'mysql:host='
.$this->parametri->getHOST()
.';'
.'dbname='
.$this->parametri->getDB()
.';'
.'charset=utf8';
try {
// connessione tramite creazione di un oggetto PDO
$db = new PDO($col , $this->parametri->getDBUSER(),
$this->parametri->getPASS());
$this->pdoconn=$db;
$this->connected=TRUE;
}
catch(PDOException $e) {
$this->connected=FALSE;
return NULL;
}
}
return $this->pdoconn;
}
public function getPDO(){
if ($this->connected){
return $this->pdoconn;
}else {
return NULL;
}
}
public function disconnect() {
$this->pdoconn=null;
$this->connected=FALSE;
}
Чтение документации PDO и комментариев на официальном сайте, когда соединение освобождается, когда $ this-> pdoconn = null; , но он прошел через getPDO().
Согласно this article и this dissertion, где-то может быть переменная, указывающая на соединение, поэтому соединение никогда не освобождается; класс считает, что соединение освобождается, и когда запрос создает новое соединение, теряющее последнее для пользователя класса.
Итак, идея состоит в том, чтобы передать соединение tu null и это или есть другой способ защитить pdoconn и заставить его быть нулевым.
public function disconnect(&$var) {
$var=null;
$this->pdoconn=null;
$this->connected=FALSE;
}
Другим способ заключается в создании класса обруча соседнего, который никогда не подвергать PDO соед и силу для выполнения запроса внутри него, чтобы управлять и разъединением.
Что о наличии статической переменной (Singleton), назначаемые соединение. Почти то, что у вас есть сейчас, но статическое, поэтому оно повторяет одно и то же соединение, потому что статичность будет сохраняться без создания новых соединений. – Rasclatt
Оба решения очень интересны. Я не знаю, какой из них проголосовать. – user1594895
Попробуйте один из них и посмотрите, разрешается ли ваша загрузка базы данных. – Rasclatt