在将数据输入数据库之前,我只想检查数据库中是否已存在相同的用户名。
我将SQL中的用户名设置为键,因此不能在该端重复,但我正在寻找一个更加用户友好的错误消息,然后“KEY已经存在”。
是否有简单的方法来检查变量值是否已存在于一行中?
答案 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语句。