28

I have a PHP form that enters data into my MySQL database. My primary key is one of the user-entered values. When the user enters a value that already exists in the table, the MySQL error "Duplicate entry 'entered value' for key 1" is returned. Instead of that error, I would like to alert the user that they need to enter a different value. Just an echoed message or something.

How to turn a specific MySQL error into a PHP message?

Dharman
  • 30,962
  • 25
  • 85
  • 135
RobHardgood
  • 283
  • 1
  • 3
  • 6

6 Answers6

54

To check for this specific error, you need to find the error code. It is 1062 for duplicate key. Then use the result from errno() to compare with:

mysqli_query('INSERT INTO ...');
if (mysqli_errno() == 1062) {
    print 'no way!';
}

A note on programming style
You should always seek to avoid the use of magic numbers (I know, I was the one to introduce it in this answer). Instead, you could assign the known error code (1062) to a constant (e.g. MYSQLI_CODE_DUPLICATE_KEY). This will make your code easier to maintain as the condition in the if statement is still readable in a few months when the meaning of 1062 has faded from memory :)

Utkarsh
  • 537
  • 9
  • 16
jensgram
  • 31,109
  • 6
  • 81
  • 98
  • Yeah, I just found that too :D I plugged it in and it worked perfectly. Thanks jensgram, just the solution I was looking for! – RobHardgood Jun 30 '10 at 07:13
  • @jensgram: +1 thanks for very useful answer & tip. I'm just adding this link for those using PDO: http://www.php.net/manual/en/pdo.errorcode.php – CodeVirtuoso Sep 22 '11 at 08:09
  • 1
    For OOP it's **`$mysqli->errno`**. – i336_ Jan 17 '17 at 11:22
  • to find out error number: echo mysqli_errno($link); //where link is your database connection. – Clark Superman Jul 26 '20 at 14:49
  • Why do you spend a while paragraph on instructing the reader to use constants, instead of just (or at least in addition to) applying it to your code snippet? – m7913d Dec 25 '21 at 11:46
4

You can check the return value from mysql_query when you do the insert.

$result = mysql_query("INSERT INTO mytable VALUES ('dupe')");

if (!$result) {
    echo "Enter a different value";
} else {
    echo "Save successful.";
}
nickf
  • 537,072
  • 198
  • 649
  • 721
1

try this code to handle duplicate entries and show echo message:

  $query = "INSERT INTO ".$table_name." ".$insertdata;
                if(mysqli_query($conn,$query)){
                    echo "data inserted into DB<br>";                   
                }else{
                   if(mysqli_errno($conn) == 1062)
                       echo "duplicate entry no need to insert into DB<br>";
                   else
                    echo "db insertion error:".$query."<br>";

                }//else end
Hassan Saeed
  • 6,326
  • 1
  • 39
  • 37
0

With mysql_error() function http://php.net/manual/en/function.mysql-error.php

Codler
  • 10,951
  • 6
  • 52
  • 65
0

Use mysql_errno() function, it returns the error numbers. The error number for duplicate keys is 1062. for example

$query = mysql_query("INSERT INTO table_name SET ...);
if (mysql_errno() == 1062){
    echo 'Duplicate key';
}
Kyad
  • 119
  • 3
  • 13
0

This is my full code that I used and works perfect. Its PDO friendly, and can handle your error easily, (once you have used die to discover what that is. Then you can copy the error message from there, and enclose it in an if. This came from a signup page, where I wanted to redirect to the login page, if the primary key (email) was found, and produced an error.

function insertUserDetails($email, $conn){

  try {
      $query = $conn->prepare ("INSERT INTO users (emailaddress) VALUES (:email)");
            $query ->bindValue('email', $email);
            $query->execute();
        }
  catch (PDOException $e) {

      if(str_contains($e, '1062 Duplicate entry')) {
          header("Location: login.php");

      }
          die("Error inserting user details into database: " .  $e->getMessage());

  }
}
Spinstaz
  • 287
  • 6
  • 12