正确检查MySQLi OOP错误

时间:2014-08-06 12:21:43

标签: php mysql sql database string

我正在使用OO MySQLi来处理注册表单。我在我的表中创建了用户名列unique,并注意到$stmt在代码尝试使用execute()方法时会抛出错误,如果给出了重复的用户名。

我想知道如何在错误检测中区分其他错误和重复的用户名错误?目前我基本上是这样做的:

$stmt->execute();
if($stmt->error)
    die();

问题是,如果execute()由于其他原因(而不是重复的用户名)失败,我很可能想要记录它,但我不希望每次用户尝试注册时都记录取用户名。我想出的最简单(也可能不是很好)的解决方案是分析$stmt->error消息。如果问题是关于重复的用户名,则字符串将为"Duplicate entry 'value' for key 'column'",因此我可以检查字符串的第一个单词是"Duplicate entry "。但我想这很容易出错。

有更好的建议吗?

2 个答案:

答案 0 :(得分:0)

您可以在插入之前运行一个语句来检查表中是否已存在用户名,如果它没有运行insert语句,则根据需要记录/抛出错误。

答案 1 :(得分:0)

mysql_statement具有$sqlstate属性,记录的值为in the MySQL manual

如果您使用例外,mysqli_sql_exception还有两个额外的相关属性:

protected string $sqlstate ;
protected int $code ;

您想要检查error = 1062sqlstate = '23000'