我正在使用OO MySQLi来处理注册表单。我在我的表中创建了用户名列unique
,并注意到$stmt
在代码尝试使用execute()
方法时会抛出错误,如果给出了重复的用户名。
我想知道如何在错误检测中区分其他错误和重复的用户名错误?目前我基本上是这样做的:
$stmt->execute();
if($stmt->error)
die();
问题是,如果execute()
由于其他原因(而不是重复的用户名)失败,我很可能想要记录它,但我不希望每次用户尝试注册时都记录取用户名。我想出的最简单(也可能不是很好)的解决方案是分析$stmt->error
消息。如果问题是关于重复的用户名,则字符串将为"Duplicate entry 'value' for key 'column'"
,因此我可以检查字符串的第一个单词是"Duplicate entry "
。但我想这很容易出错。
有更好的建议吗?
答案 0 :(得分:0)
您可以在插入之前运行一个语句来检查表中是否已存在用户名,如果它没有运行insert语句,则根据需要记录/抛出错误。
答案 1 :(得分:0)
mysql_statement
具有$sqlstate
属性,记录的值为in the MySQL manual。
如果您使用例外,mysqli_sql_exception
还有两个额外的相关属性:
protected string $sqlstate ;
protected int $code ;
您想要检查error = 1062
或sqlstate = '23000'
。