2010-03-23 106 views
1

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

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

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

回答

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,或者其他任何东西 - 回应测试时得到的异常,并使用它)。这样,如果实际上存在另一个问题(例如DB连接错误),则不会显示通知用户现有用户名的错误。

祝你好运!

+0

这听起来和我想要做的完全一样。 你如何捕捉异常?你有解释它的链接吗? 我试图用google搜索到不了,但是我的关键字保存在一个已经填充的数据库中,导致“如何检查重复条目的数据库”。 – 2010-03-23 02:40:35

+0

非常感谢Mike!这正是我要找的。 – 2010-03-23 02:58:55

0

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

第一种方法是事先在该用户名上执行select语句以检测任何重复项。如果一行被返回,那么你知道该用户名已经存在。

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

我在脚本中使用了预选语句。

2

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

SELECT COUNT(*) FROM YourTable WHERE YourKeyCol = YourKeyValue 

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

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

2

可能有special way这取决于您正在使用的RDBMS。 例如,使用MySQL,你可以说

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

既然你已经设置username是唯一的关键,这将插入('foo',123)table只有当foo是不是已经在表中。如果确实存在,则更新value

或者,你可以使用类似

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

而忽略插入如果foo已经在表中。

+0

我以前从来没有听说过插入忽略。棒极了。 – 2010-03-23 14:32:19

相关问题