Monday, 27 August 2018

MySQLi does not return an error code

In my MySQL database I have a table "table1" with unique constraint set on column "name" - I want to prevent duplicate names.

If there's already name 'John' in table this code:
$db=new mysqli(...);

$sql="INSERT INTO table1 SET id=10,name='John'";

if(!$db->query($sql))
{
  if($db->errno==1062)
  {
    throw new InsertNonUniqueException(...);
  }
  else
  {
    throw new InsertException(...);
  }
}

should throw InsertNonUniqueException() (my own exception). Instead, it throws InsertException().
Execution of query returns false and execution enters the if() loop. Also $db->row_affected is -1 but problem is that $db->errno is always O (it should be 1062)!!! So I can't detect that my insert error was caused by violating unique key constraint on name column!
I don't know why mysqli does not return 1062 code when unique key constraint violation occurs!

I can't leave a comment, thus going to ask you here.
Please provide the result of SHOW CREATE TABLE table1;
I can't reproduce your problem using your code and next table:
CREATE TABLE `table1` (
`name` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

0 comments:

Post a Comment