我有这个注册表单,其中有几个Unique字段。现在插入时,我想检测尝试重复值的所有字段。我怎样才能做到这一点?我使用MySQL服务器5.5.8和PHP 5.3。谢谢!
答案 0 :(得分:0)
答案 1 :(得分:0)
如果使用唯一键约束创建表(或之后使用alter table命令)作为唯一时,指定任何不具有重复项的键,则插入将失败。这将导致mysql_query()返回false,并且您可以使用myqsl_error()从前一个mysql操作获取错误消息。像这样:
if(mysql_query("INSERT INTO tbl VALUES ('1','2','3'))
{
//success code
}
else
{
$error_string = mysql_error();
//handle error
}
我不确定错误消息是否会为您提供您正在寻找的内容,但至少会降低您的数据库开销。
答案 2 :(得分:0)
MySQL错误只会返回一个violidated的密钥。由于可以在不同的行中找到不同的列值,因此没有简单的方法可以获得所有这些值。使用SELECT * FROM table WHERE column1=val1 OR column2=val2
之类的查询将无效,因为它可以使用任何索引。进行少量单独查询以检查每个字段是更好的方法。如果这是InnoDB并且你只是为了查询列(SELECT列FROM表WHERE column = val),这将是索引覆盖的查询,即使你有数百万用户,这也是极快的(我假设我们正在讨论几个独特的领域)
答案 3 :(得分:-1)
您可以遍历$ _POST或$ _GET,具体取决于您使用的任何表单方法。 考虑这个例子:
$input = array();
foreach($_POST as $key => $val) {
$input["$key"] = trim($val);
}
现在我们有一个已清理的输入版本,修剪了前导和尾随空格。
通过循环值来获取哪些字段是重复的:
foreach($input as $key => $val) {
$keys = array_keys($input, $val);
if(count($keys) > 1) {
/* More code here */
}
}