How to use try, catch, finally, and exception in php

1

I have source where I need to now adapt it to use try , catch , finally and exception and I'm not getting it, this font already has some try´s com catch(PDOException $erro) where I do some validations, because I am making a call with JSon return and returning the operation status to the user and I believe that now they are unnecessary. I tried to isolate the messages to throw them in the exception deleting them from the body of the code, but as I said unsuccessfully, I do not know exactly what has to be done, since I have several interactions between select , delete and insert to just send commit or rollBack and send message to the user, finishing the process.

What I have so far:

The call:

$(document).ready(function(){
    $(function () {
        // Validation
        $("#frmGravaDados").validate({
            // Do not change code below
            errorPlacement: function (error, element) {
                error.insertAfter(element.parent());
            },
            submitHandler: function (form) {

                var data = $(form).serialize();

                console.log(data);

                $.ajax({
                    type: 'POST',
                    url: 'ajax/pInterfaceServico.php',
                    data: data,
                    dataType: 'json',
                    beforeSend: function () {
                        $("#msgBusca").html('×AVISO! Enviando...');
                    },
                    success: function (response) {
                        if (response.codigo == "1") {
                            $("#msgBusca").html('×AVISO!' + response.mensagem  + '');                          

                        } else {
                            $("#msgBusca").html('×ATENÇÃO! ' + response.mensagem + '');
                        }
                    },
                    error: function (xhr, ajaxOptions, thrownError) {
                        console.log(xhr, ajaxOptions, thrownError);
                        $("#msgInsert").html('×ATENÇÃO! Ocorreu um erro no registro de direito. Contate o suporte técnico.');
                    }
                });
                return false;
            }
        });
    }); 
});

The code in php :

// ATRIBUI UMA CONEXÃO PDO   
$conexao = Conexao::getInstance();
$crud    = Crud::getInstance($conexao);

// DADOS DO FORMULÁRIO
$IdInterface = (isset($_POST['IdInterface'])) ? $_POST['IdInterface'] : '';
$IdUsuario = (isset($_POST['IdUsuario'])) ? $_POST['IdUsuario'] : '';
$Servicos = (isset($_POST['Servicos'])) ? $_POST['Servicos'] : '';

try {
    // BUSCANDO REGISTROS USUÁRIO X SERVIÇO
    $sql = "SELECT 
              'gasServico'.IdServico,
              'gasUsuarioServico'.IdUsuario
            FROM
              'gasServico'
              INNER JOIN 'gasUsuarioServico' ON ('gasServico'.IdServico = 'gasUsuarioServico'.IdServico)
            WHERE
              ('gasUsuarioServico'.IdServico = 'gasServico'.IdServico) AND 
              ('gasUsuarioServico'.IdUsuario = ?) AND 
              ('gasServico'.IdInterface = ?)";
    $stm = $conexao->prepare($sql);
    // DEFINE O TIPO DA VARIÁVEL PDO::PARAM_INT OU STR
    $stm->bindValue(1, $IdUsuario, PDO::PARAM_INT);
    $stm->bindValue(2, $IdInterface, PDO::PARAM_INT);
    $stm->execute();
    $ResDados = $stm->fetchAll(PDO::FETCH_OBJ); 
    // CONTAGEM DE REGISTROS RETORNADOS
    $conProd = count($ResDados);  
    // FECHANDO A CONSULTA
    $stm->closeCursor();  

    // DELETANDO REGISTROS USUÁRIO X SERVIÇO
    foreach ($ResDados as $DadosUsuarioServico) { 
        try{            

            $IdUsuario = $DadosUsuarioServico->IdUsuario;
            $IdServico = $DadosUsuarioServico->IdServico;

            $sql = "DELETE FROM 'gasUsuarioServico' WHERE 'IdUsuario' = ? AND 'IdServico' = ?";
            $stm = $conexao->prepare($sql);
            $stm->bindValue(1, $IdUsuario, PDO::PARAM_INT);
            $stm->bindValue(2, $IdServico, PDO::PARAM_INT);                    
            $stm->execute();                
            $retorno = array('codigo' => '1', 'mensagem' => ' Serviços excluídos com sucesso'); 
        } catch(PDOException $erro) {  
            $erro = $erro->getMessage();
            $retorno = array('codigo' => '0', 'mensagem' => ' Erro ao deletar os serviços. Tente novamente. ::$erro');
        }       
    }

    // GRAVANDO OS CHECKS MARCADOS
    if ($Servicos != "") {  
        try {   
            foreach($Servicos as $IdServico) {  
                // INSERT
                $crud = $conexao->prepare("INSERT INTO gasUsuarioServico (IdUsuario, IdServico) VALUES (?, ?)");
                $crud->bindParam(1, $IdUsuario , PDO::PARAM_INT);
                $crud->bindParam(2, $IdServico , PDO::PARAM_INT);       
                $crud->execute();       
                $retorno = array('codigo' => '1', 'mensagem' => ' Serviços inseridos com sucesso'); 
            }       
        } catch(PDOException $erro) {  
                $erro = $erro->getMessage();
                $retorno = array('codigo' => '0', 'mensagem' => ' Erro ao inserir os serviços. Tente novamente. ::$erro');
        }
    }

    // BUSCANDO REGISTROS USUÁRIO X SERVIÇO
    $sqlInterface = "    
        SELECT 
              gasUsuarioServico.IdUsuario,
              gasUsuarioServico.IdServico,
              gasServico.IdInterface
            FROM
              gasUsuarioServico
              INNER JOIN gasServico ON (gasUsuarioServico.IdServico = gasServico.IdServico)
            WHERE
              (gasUsuarioServico.IdUsuario = ?) AND 
              (gasServico.IdInterface = ?)";
    $stm = $conexao->prepare($sqlInterface);
    // DEFINE O TIPO DA VARIÁVEL PDO::PARAM_INT OU STR
    $stm->bindValue(1, $IdUsuario, PDO::PARAM_INT);
    $stm->bindValue(2, $IdInterface, PDO::PARAM_INT);
    $stm->execute();    
    $ResDadosInterface = $stm->fetchAll(PDO::FETCH_OBJ); 
    // CONTAGEM DE REGISTROS RETORNADOS
    $conSqlDel = count($ResDadosInterface); 
    // FECHANDO A CONSULTA
    $stm->closeCursor();  

    // DELETANDO REGISTROS USUÁRIO X INTERFACE
    if ($conSqlDel == 0) {
        try {
                $sql = "DELETE FROM gasUsuarioInterface WHERE gasUsuarioInterface.IdUsuario = ? AND gasUsuarioInterface.IdInterface = ?";
                $stm = $conexao->prepare($sql);        
                $stm->bindValue(1, $IdUsuario, PDO::PARAM_INT);
                $stm->bindValue(2, $IdInterface, PDO::PARAM_INT);                    
                $stm->execute(); 
                $retorno = array('codigo' => '1', 'mensagem' => ' Interfaces do usuários deletadas com sucesso');
        } catch(PDOException $erro) {  
                $erro = $erro->getMessage();
                $retorno = array('codigo' => '0', 'mensagem' => ' Erro ao deletar interfaces para o usuário. Tente novamente. ::$erro');
        }   
    } else {

        // BUSCANDO REGISTROS INTERFACES
        $sqlInterfaceReg = "    
                SELECT * FROM
                    gasUsuarioInterface
                WHERE
                    (gasUsuarioInterface.IdUsuario = ?) AND 
                    (gasUsuarioInterface.IdInterface = ?)";
            $stm = $conexao->prepare($sqlInterfaceReg);
            // DEFINE O TIPO DA VARIÁVEL PDO::PARAM_INT OU STR
            $stm->bindValue(1, $IdUsuario, PDO::PARAM_INT);
            $stm->bindValue(2, $IdInterface, PDO::PARAM_INT);
            $stm->execute();        
            $ResUsuarioInterface = $stm->fetchAll(PDO::FETCH_OBJ); 
            $countInsert = count($ResUsuarioInterface);
            // FECHANDO A CONSULTA
            $stm->closeCursor();    

        if ($countInsert == 0) {
            try {
                // INSERT USUÁRIO X INTERFACE           
                $crud = $conexao->prepare("INSERT INTO gasUsuarioInterface (IdUsuario, IdInterface) VALUES (?, ?)");
                $crud->bindParam(1, $IdUsuario , PDO::PARAM_INT);
                $crud->bindParam(2, $IdInterface , PDO::PARAM_INT);     
                $crud->execute();       
                $retorno = array('codigo' => '1', 'mensagem' => ' Interfaces do usuários inseridas com sucesso');
            } catch(PDOException $erro) {  
                $erro = $erro->getMessage();
                $retorno = array('codigo' => '0', 'mensagem' => ' Erro ao deletar interfaces para o usuário. Tente novamente. ::$erro');
            }           
        }
    }   
} catch (Exception $e) { 
    echo $e->getMessage();
}

// FECHA CONEXÃO
$conexao = null;        

// RETORNO DE MENSAGEM
echo json_encode($retorno);
exit();
    
asked by anonymous 21.12.2017 / 17:22

1 answer

2

After some research and help from some friends I got what I needed and I come to share with you the final result, I hope you can help someone.

Commented code, below:

// ATRIBUI UMA CONEXÃO PDO   
$conexao = Conexao::getInstance();
$crud    = Crud::getInstance($conexao);

// DADOS DO FORMULÁRIO
$IdInterface = (isset($_POST['IdInterface'])) ? $_POST['IdInterface'] : '';
$IdUsuario = (isset($_POST['IdUsuario'])) ? $_POST['IdUsuario'] : '';
$Servicos = (isset($_POST['Servicos'])) ? $_POST['Servicos'] : '';

try {

    // INICIALIZA A TRANSAÇÃO
    $conexao->beginTransaction();

    // BUSCANDO REGISTROS USUÁRIO X SERVIÇO
    $sql = "SELECT 
              'gasServico'.IdServico,
              'gasUsuarioServico'.IdUsuario
            FROM
              'gasServico'
              INNER JOIN 'gasUsuarioServico' ON ('gasServico'.IdServico = 'gasUsuarioServico'.IdServico)
            WHERE
              ('gasUsuarioServico'.IdServico = 'gasServico'.IdServico) AND 
              ('gasUsuarioServico'.IdUsuario = ?) AND 
              ('gasServico'.IdInterface = ?)";
    $stm = $conexao->prepare($sql);
    // DEFINE O TIPO DA VARIÁVEL INT OU STR
    $stm->bindValue(1, $IdUsuario, PDO::PARAM_INT);
    $stm->bindValue(2, $IdInterface, PDO::PARAM_INT);
    $stm->execute();
    $ResDados = $stm->fetchAll(PDO::FETCH_OBJ); 
    // CONTAGEM DE REGISTROS RETORNADOS
    $conProd = count($ResDados);  
    // FECHANDO A CONSULTA
    $stm->closeCursor();  

    // DELETANDO REGISTROS USUÁRIO X SERVIÇO
    foreach ($ResDados as $DadosUsuarioServico) { 
        try{

            $IdUsuario = $DadosUsuarioServico->IdUsuario;
            $IdServico = $DadosUsuarioServico->IdServico;

            $sql = "DELETE FROM 'gasUsuarioServico' WHERE 'IdUsuario' = ? AND 'IdServico' = ?";
            $stm = $conexao->prepare($sql);
            $stm->bindValue(1, $IdUsuario, PDO::PARAM_INT);
            $stm->bindValue(2, $IdServico, PDO::PARAM_INT);                    
            $stm->execute(); 

        } catch(PDOException $erro) { 

            // DESFAZ TRANSAÇÃO ATUAL           
            $conexao->rollBack();           
            $erro = $erro->getMessage();
            $retorno = array('codigo' => '0', 'mensagem' => ' Erro ao deletar os serviços. Tente novamente [1]. ::$erro');  
            $conexao = null;        

            // RETORNO DE MENSAGEM
            echo json_encode($retorno);
            exit(); 

        }       
    }

    // GRAVANDO OS CHECKS MARCADOS
    if ($Servicos != "") {  
        try {   

            foreach($Servicos as $IdServico) {  
                // INSERT
                $crud = $conexao->prepare("INSERT INTO gasUsuarioServico (IdUsuario, IdServico) VALUES (?, ?)");
                $crud->bindParam(1, $IdUsuario , PDO::PARAM_INT);
                $crud->bindParam(2, $IdServico , PDO::PARAM_INT);       
                $crud->execute();                       
            }       

        } catch(PDOException $erro) {  

                // DESFAZ TRANSAÇÃO ATUAL
                $conexao->rollBack();           
                $erro = $erro->getMessage();
                $retorno = array('codigo' => '0', 'mensagem' => ' Erro ao inserir os serviços. Tente novamente [2]. ::$erro');
                $conexao = null;        

                // RETORNO DE MENSAGEM
                echo json_encode($retorno);
                exit();             

        }
    }

    // BUSCANDO REGISTROS USUÁRIO X SERVIÇO
    $sqlInterface = "SELECT 
                      gasUsuarioServico.IdUsuario,
                      gasUsuarioServico.IdServico,
                      gasServico.IdInterface
                    FROM
                      gasUsuarioServico
                      INNER JOIN gasServico ON (gasUsuarioServico.IdServico = gasServico.IdServico)
                    WHERE
                      (gasUsuarioServico.IdUsuario = ?) AND 
                      (gasServico.IdInterface = ?)";
    $stm = $conexao->prepare($sqlInterface);
    // DEFINE O TIPO DA VARIÁVEL INT OU STR
    $stm->bindValue(1, $IdUsuario, PDO::PARAM_INT);
    $stm->bindValue(2, $IdInterface, PDO::PARAM_INT);
    $stm->execute();    
    $ResDadosInterface = $stm->fetchAll(PDO::FETCH_OBJ); 
    // CONTAGEM DE REGISTROS RETORNADOS
    $conSqlDel = count($ResDadosInterface); 
    // FECHANDO A CONSULTA
    $stm->closeCursor();  

    // DELETANDO REGISTROS USUÁRIO X INTERFACE SE EXISTI SOBRAS
    if ($conSqlDel == 0) {
        try {

            $sql = "DELETE FROM gasUsuarioInterface WHERE gasUsuarioInterface.IdUsuario = ? AND gasUsuarioInterface.IdInterface = ?";
            $stm = $conexao->prepare($sql);        
            $stm->bindValue(1, $IdUsuario, PDO::PARAM_INT);
            $stm->bindValue(2, $IdInterface, PDO::PARAM_INT);                    
            $stm->execute();            

        } catch(PDOException $erro) {  

            // DESFAZ TRANSAÇÃO ATUAL
            $conexao->rollBack();
            $erro = $erro->getMessage();
            $retorno = array('codigo' => '0', 'mensagem' => ' Erro ao deletar interfaces para o usuário. Tente novamente [3]. ::$erro');
            $conexao = null;        

            // RETORNO DE MENSAGEM
            echo json_encode($retorno);
            exit();             

        }   
    } else {

        // BUSCANDO REGISTROS INTERFACES
        $sqlInterfaceReg = "    
                SELECT * FROM
                    gasUsuarioInterface
                WHERE
                    (gasUsuarioInterface.IdUsuario = ?) AND 
                    (gasUsuarioInterface.IdInterface = ?)";
            $stm = $conexao->prepare($sqlInterfaceReg);
            // DEFINE O TIPO DA VARIÁVEL INT OU STR
            $stm->bindValue(1, $IdUsuario, PDO::PARAM_INT);
            $stm->bindValue(2, $IdInterface, PDO::PARAM_INT);
            $stm->execute();        
            $ResUsuarioInterface = $stm->fetchAll(PDO::FETCH_OBJ); 
            $countInsert = count($ResUsuarioInterface);
            // FECHANDO A CONSULTA
            $stm->closeCursor();    

        if ($countInsert == 0) {
            try {

                // INSERT USUÁRIO X INTERFACE           
                $crud = $conexao->prepare("INSERT INTO gasUsuarioInterface (IdUsuario, IdInterface) VALUES (?, ?)");
                $crud->bindParam(1, $IdUsuario, PDO::PARAM_INT);
                $crud->bindParam(2, $IdInterface, PDO::PARAM_INT);      
                $crud->execute();                       

            } catch(PDOException $erro) {  

                // DESFAZ TRANSAÇÃO ATUAL
                $conexao->rollBack();

                $erro = $erro->getMessage();
                $retorno = array('codigo' => '0', 'mensagem' => ' Erro ao deletar interfaces para o usuário. Tente novamente [4]. ::$erro');                
                $conexao = null;        

                // RETORNO DE MENSAGEM
                echo json_encode($retorno);
                exit();                 

            }           
        }
    }   

    $conexao->commit();

} catch (Exception $e) {    

    // DESFAZ TRANSAÇÃO ATUAL
    $conexao->rollBack();   
    $retorno = array('codigo' => '0', 'mensagem' => ' Ocorreu um erro na gravação, tente novamente [5]. ::$erro');              
    $conexao = null;        

    // RETORNO DE MENSAGEM
    echo json_encode($retorno);
    exit();     
}

$retorno = array('codigo' => '1', 'mensagem' => ' Direito de Acesso inserido com sucesso'); 

// FECHA CONEXÃO
$conexao = null;        

// RETORNO DE MENSAGEM
echo json_encode($retorno);
exit();
    
22.12.2017 / 17:12