【发布时间】:2015-01-19 20:35:56
【问题描述】:
在我的 MySQL 数据库中,我有一个表“table1”,在“名称”列上设置了唯一约束 - 我想防止重复名称。
如果表中已经有姓名“约翰”,则此代码:
$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(...);
}
}
应该抛出 InsertNonUniqueException() (我自己的异常)。相反,它会抛出 InsertException()。
查询的执行返回false,执行进入if()循环。 $db->row_affected 也是 -1 但问题是 $db->errno 总是 O(应该是 1062)!!!所以我无法检测到我的插入错误是由违反 name 列的唯一键约束引起的!
不知道为什么mysqli在违反唯一键约束时不返回1062码!
【问题讨论】:
-
您确定您的列上有唯一索引吗?
-
是的,我确定,因为如果我在 SQL 命令行中执行相同的 sql,它会返回“错误代码 1062,SQL 状态 23000:重复条目 'John' for key...”
-
echo $db->errno 看看是怎么说的。
-
您的 sql 代码在这里运行良好 - mysql 5.5.16。我假设'throw InsertNonUniqueException'是一个打字错误,因为它应该是:'throw new insertNonUniqueException(...'。
-
试试
INSERT INTO table1 (id, name) VALUES (10, 'John')