我使用OO MySQLi来处理注册表单。我在表中创建了用户名列unique,并注意到如果给出重复的用户名,当代码尝试使用execute()方法时,$stmt会抛出一个错误。
我想知道如何在错误检测中区分其他错误和重复用户名错误?现在我基本上是这样做的:
$stmt->execute();
if($stmt->error)
die();问题是,如果execute()由于另一个原因(而不是重复的用户名)而失败,我很可能想要记录它,但是我不想每次用户尝试用一个被取的用户名注册时都记录它。我想出的最简单(也可能不是很好的)解决方案是分析$stmt->error消息。如果问题与重复用户名有关,则字符串将为"Duplicate entry 'value' for key 'column'",因此我只需检查字符串首字母是否为"Duplicate entry "。但我想这很容易出错。
有更好的建议吗?
发布于 2014-08-06 13:36:15
mysql_statement具有一个$sqlstate属性,其值为在MySQL手册中文档。
如果您处理异常,mysqli_sql_exception还具有两个额外的相关属性:
protected string $sqlstate ;
protected int $code ;你想要检查一下error = 1062或sqlstate = '23000'。
发布于 2014-08-06 12:23:26
您可以在insert之前运行一条语句,以检查用户名是否已经存在于表中,如果它没有运行insert语句,则根据需要记录它/抛出错误。
https://stackoverflow.com/questions/25160267
复制相似问题