2013-12-04 5 views
1

Я пытался создать цикл для другого сервера MSSQL в Symfony 2.3, но если некоторые из серверов отключены или служба MSSQL отключена, приложение не делает исключения и он нарушает функцию.Соединения в цикле для SQL Server Symfony2

Это главный контроллер:

function pruebaconAction() 
{ 
    $enlistaServers = new array (
           10.10.10.1, 
           10.10.10.2, 
           10.10.10.3, 
           ... 
           10.10.10.19, 
           10.10.10.20 
           ); 

    foreach($enlistaServers as $datosServer) 
    { 
     $direccionIPParaConexion = $datosServer->getDireccionIp(); 
     $nombreLocalidad = $datosServer->getNombre(); 
     register_shutdown_function(array($this, 'conectaSrv'), $direccionIPParaConexion, $nombreLocalidad); 
    } 
    return $this->render("GastoEnlaceBundle:Default:pruebacon.html.twig"); 
} 

Эта функция создает СВЯЗЬ:

function conectaSrv($direccionIpConexion, $nombreLocalidad) 
{ 
    $pruebaDBAL = new \Doctrine\DBAL\Configuration(); 
    $parametrosConexion = array(
     'dbname' => 'MyDB', 
     'user' => 'user', 
     'password' => 'password', 
     'host' => $direccionIpConexion, 
     'driver' => 'pdo_sqlsrv' 
    ); 
    $conexionDBAL = DriverManager::getConnection($parametrosConexion, $pruebaDBAL); 
    if($conexionDBAL->connect()) 
     echo "Success<br />"; 
    else 
     throw new Exception("Something is wrong :(<br />"); 
    echo "=======================================================================<br />"; 
} 

Я всегда получаю тот же результат, для всех серверов на линии, соединение успешно, но если некоторые из серверов в автономном режиме, функция никогда не отправляет исключение, и она прерывает цикл.

Я надеюсь, что кто-то может мне помочь или дать совет, спасибо большое.

ответ

0

register_shutdown_function Регистрирует функцию обратного вызова, которая будет выполнена после того, как скрипт завершает выполнение или выходе() называется

Так что я думаю, что вы не можете работать новое соединение, даже если вы его получите. IMHO, лучшим подходом будет создание собственного сервиса, который обрабатывает соединения БД и не использует this-> getDoctrine(). В этой службе вы можете вызвать разных менеджеров сущностей (по одному для каждого ip) и проверить исключение. Если возникает исключение, вы можете использовать другой диспетчер объектов для запуска запроса и, возможно, установить его как значение по умолчанию;

+0

Спасибо за ваш совет, я использую register_shutdown_function, чтобы избежать «Fatal Error», потому что в любое время, когда я проверяю соединения, всегда получается «Fatal Error» через одну минуту, я попытаюсь создать собственный сервис, и я скажу вы – lemux

Смежные вопросы