我使用OO MySQLi与注册表单一起工作。我在表中制作了用户名列unique
,并注意到当代码试图使用execute()
方法时,如果给出了重复的用户名,$stmt
将抛出错误。
我想知道如何在错误检测中区分其他错误和重复用户名错误?现在我基本上是这样做的:
$stmt->execute();
if($stmt->error)
die();
问题是,如果execute()
失败的另一个原因(而不是重复的用户名),我很可能想要记录它,但我不想记录每次用户试图用已采取的用户名注册。我马上想到的最简单的(可能不是很好的)解决方案是分析$stmt->error
消息。如果问题是关于重复的用户名,字符串将是"Duplicate entry 'value' for key 'column'"
,所以我可以检查字符串的第一个单词是否为"Duplicate entry "
。但我想这很容易出错。
mysql_statement
有一个$sqlstate
属性,其值在MySQL手册中记录。
如果你使用异常,mysqli_sql_exception
也有两个额外的相关属性:
protected string $sqlstate ;
protected int $code ;
您要检查error = 1062
或sqlstate = '23000'
。
您可以在插入之前运行一条语句来检查用户名是否已经在表中存在,如果不存在,则运行插入语句,否则记录它/根据需要抛出错误