phpmysqlerror-handlingsql-insertmysql-error-1062

How to handle error for duplicate entries?


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?


Solution

  • 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 :)