Handling Mysql error

2

I have an insert script and would like to be able to display the user a custom message for the following message trying to register an existing record:

Duplicate entry '42-1' for key 'PRIMARY'. 

I tried to use some examples like:

mysql_errno($link) e mysql_error($link)

But I could not display the result, the message does not appear, I have the following line in my code that shows the unhandled message:

$aretorno["msg"] = "Ocorreu um erro na inclusão dos dados: " . $stmt->error . ". Verifique.";
$aretorno["status"] = "ERRO";

The message displayed is this:

Ocorreu um erro na inclusão dos dados: Duplicate entry '42-1' for key 'PRIMARY'. Verifique.

The code of the attempt to write with duplicate primary key and attempt to display the treated message is this:

if ($_POST["Operacao"] == 'FaseObrigatoria') {

    $sql = "INSERT INTO gerFaseObrigatoria (IdContrato, IdTipoFase, Ordem) VALUES (?, ?, ?)";

    if($stmt = $conn->prepare($sql) ){
        $bind = $stmt->bind_param(
            "iii",          
            $_POST["IdContrato"],
            $_POST["IdTipoFase1"],
            $_POST["iOrdem"]
        );
            // EXECUTANDO A QUERY
            if($stmt->execute()){
                $aretorno["msg"] = "Registro inserido com sucesso.";
                $aretorno["par"] = $_POST["IdContrato"];
            } else {
                $aretorno["msg"] = "Ocorreu um erro na inclusão dos dados: " . $stmt->mysql_error($conn) . ". Verifique.";
                $aretorno["status"] = "ERRO";
            }
    } else {
        $aretorno["msg"] = "Ocorreu um erro na preparação dos dados: "  . $stmt->error . ". Verifique.";
        $aretorno["status"] = "ERRO";
    }
} 

I tried to get the error like this:

mysql_errno($conn) == 1451)
    
asked by anonymous 22.02.2016 / 21:01

1 answer

2

When an insert fails, it can send the user a generic message, when the failure is for a duplicate item (1062), get the specific sqlstate (error code) and compare within an if. mysqli_errno or $ errno of MySQLi return the error code the first is for the procedural style the second for the object-oriented.

if(!$stmt->execute()){
   if($stmt->errno == 1062){
       echo 'erro ao cadastras, essa informação já existe no banco';
   }
}

List with MySQL error codes

    
22.02.2016 / 21:17