В общем с PDO история такая, что сама пул соединений управляется как на стороне драйвера, так и на стороне MySQL. Если соединение не используется, то оно будет закрыто.
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
// соединение установлено
// делаем какую-то работу
// закрываем соединение
$dbh = null;
По-хорошему вам нужно изолировать выполнением вашего запроса в отдельную функцию и вызывать ее через определенные интервалы.
function doit() {
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
// соединение установлено
// делаем какую-то работу
// закрываем соединение
$dbh = null;
}
// а затем вызывать вот так
doit();
sleep(60);
doit();
Также рекомендуется проверить значение
wait_timeout в настройках MySQL.
Еще, как вариант, можно сделать нечто вроде этого
https://terenceyim.wordpress.com/2009/01/09/adding...
Дело в том, что у PDO нет полноценного ping, поэтому приходится симулировать его пустым запросом и отловом исключения с восстановлением соединения в дальнейшем.