Best option to be used in error handling?

2

I am creating a library in PHP to connect to the database and manipulate data from it, but I do not know what the best option is to handle the errors, whether it is best to use try/catch , echo/return or die .

I'm currently using multiple if/else to go through (validate) the data, in case of error I display a echo with error and give return false (not to execute the remaining code) I just continue my checks and at the end return true or array (depending on the function). Here is an example of my simplest function (the deletar ):

function deletar($tabela, $where = NULL)
{
    if(!function_exists("conectar"))
    {   //falta include de conexao.php
        echo "Não há uma conexão ativa com o seu banco de dados!\n<br><i>Inclua a página ../conexao.php<br>";
        return false;
    }
    else
    {
        //conexao feita
        if($tabela)
            $tabela = "DELETE FROM ".$tabela." ";
        else
        {
            echo "<br>Não foi indicada nenhum tabela.<br>";
            return false;
        }

        $where = minwhere($where);

        echo $sql = $tabela.$where;

        if($conn = conectar())
        {
            if($result = $conn->query($sql))
            {
                $stmt = $conn->prepare( $sql );
                if($result = $stmt->execute())
                        echo "<br>Deletado!<br>";
                else
                    echo "<br>Query inválida!<br>";

                $conn = null;
                return true;
            }
            else
            {
                echo "<br>Query inválida!<br>";
                return false;
            }  
        }
        else
        {
            echo "<br>Não foi possível conectar-se ao banco de dados!<br>\n<i>Verifique as variáveis do arquivo ../conexao.php</i>";
            return false;
        }
    }
};

Follow the remainder of the library (for if someone wants to review other functions).

What can be better at handling errors? Is the way I'm doing a valid alternative or bad code?

    
asked by anonymous 26.12.2015 / 16:30

2 answers

4

Basically that's right, it just might be more organized. I could organize even more than I did below, but I would run away from the style being made.

This lot of echo is always a shallow way to handle the error. In serious applications, the treatment would be done quite differently, I would never throw a text anyway on the page. But this would have to restructure the entire application, not just this stretch. I even understand that most people do that, but it's the "pig" way of doing it.

Honestly, being a library, I found a horrible code. It seems code of who is starting in programming. I would not follow her to learn.

function deletar($tabela, $where = NULL) {
    if(!function_exists("conectar")) {
        echo "Não há uma conexão ativa com o seu banco de dados!\n<br><i>Inclua a página ../conexao.php<br>";
        return false;
    }
    if(!$tabela) {
        echo "<br>Não foi indicada nenhum tabela.<br>";
        return false;
    }
    $tabela = "DELETE FROM ".$tabela." ";
    $where = minwhere($where);
    echo $sql = $tabela . $where;
    if(!($conn = conectar())) {
        echo "<br>Não foi possível conectar-se ao banco de dados!<br>\n<i>Verifique as variáveis do arquivo ../conexao.php</i>";
        return false;
    }
    if($result = $conn->query($sql)) {
        $stmt = $conn->prepare( $sql );
        echo ($result = $stmt->execute()) ? "<br>Deletado!<br>" : "<br>Query inválida!<br>";
        $conn = null; //isto provavelmente é um erro
        return true;
    }
    echo "<br>Query inválida!<br>";
    return false;
}

Discuss the subject in another question .

    
26.12.2015 / 20:05
2

Solution using try catch

try {

    if(!function_exists("conectar")) {
        throw new Exception( "Não há uma conexão ativa com o seu banco de dados!\n<br><i>Inclua a página ../conexao.php<br>" );
    }
    if(!$tabela) {
        throw new Exception( "<br>Não foi indicada nenhum tabela.<br>" );
    }

    $tabela = "DELETE FROM ".$tabela." ";
    $where = minwhere($where);
    echo $sql = $tabela . $where

    if(!($conn = conectar())) {
        throw new Exception( "<br>Não foi possível conectar-se ao banco de dados!<br>\n<i>Verifique as variáveis do arquivo ../conexao.php</i>" );
    }

    $result = @$conn->query($sql);

    if(!$result) {
        throw new Exception( "<br>Query inválida!<br>" );
    }

    $stmt = $conn->prepare( $sql );
    echo ($result = $stmt->execute()) ? "<br>Deletado!<br>" : "<br>Query inválida!<br>";
    $conn = null; //isto provavelmente é um erro
    return true;

} catch( Exception $e ) {

    echo $e->getMessage();
    return false;
}
    
28.12.2015 / 15:10