在输入数据之前检查数据库中的重复项

时间:2010-03-23 02:34:45

标签: php sql

在将数据输入数据库之前,我只想检查数据库中是否已存在相同的用户名。

我将SQL中的用户名设置为键,因此不能在该端重复,但我正在寻找一个更加用户友好的错误消息,然后“KEY已经存在”。

是否有简单的方法来检查变量值是否已存在于一行中?

4 个答案:

答案 0 :(得分:3)

在尝试插入之前执行检查,或捕获异常并在应用程序中以更干净和用户友好的方式显示它。

编辑:看看this tutorial on PHP exception handling。您可能希望将查询执行包装在try-catch块中,如下所示:

try
{
    // do your query here (it's been forever since I've used PHP)
}
catch(Exception $e)
{
    // display a clean error to the user
}

除了捕捉一般类型Exception之外,你不想弄清楚你实际得到的是什么类型的异常(类似MySQLDuplicateKeyException,或者它可能是什么) - 回应测试时获得的异常,并使用它。这样,如果实际上存在另一个问题(例如数据库连接错误),则不会显示错误通知用户现有用户名。

祝你好运!

答案 1 :(得分:2)

检查数据是否存在的技术是发出查询:

 SELECT COUNT(*) FROM YourTable WHERE YourKeyCol = YourKeyValue

然后检查数据集中唯一返回的行的第一个返回列。如果它包含0,则数据不存在,否则就会找到。

但正如其他人所指出的,你可以继续发布你的INSERT。检查错误代码以确定它是否失败。这样性能更高,因为对于数据尚未存在于数据库中的情况,您将只执行一个查询而不是两个查询。

答案 2 :(得分:2)

根据您使用的RDBMS,可能会有special way来执行此操作。 例如,使用MySQL,你可以说

INSERT INTO table (username,value) VALUES ('foo',123) ON DUPLICATE KEY UPDATE value = 123;

由于您已将username设置为唯一键,因此只有当foo不在表中时,才会将('foo',123)插入table。如果确实存在,则更新value

或者,您可以使用类似

的内容
INSERT IGNORE INTO table (username,value) VALUES ('foo',123)

如果表中已有foo,则忽略插入。

答案 3 :(得分:0)

我可以想到两种方法来做到这一点。

第一个只是事先在该用户名上执行select语句以检测任何重复项。如果返回一行,则表示该用户名已存在。

另一个是你可以让mysql使用mysql_errno返回错误号,然后你可以简单地使用if语句来检查特定的错误号。唯一的问题是它可能无法指示哪个字段是密钥的副本。

我在我的脚本中使用了pre select语句。