识别正在复制的字段!

时间:2011-07-10 02:42:59

标签: php mysql unique duplicates

我有这个注册表单,其中有几个Unique字段。现在插入时,我想检测尝试重复值的所有字段。我怎样才能做到这一点?我使用MySQL服务器5.5.8和PHP 5.3。谢谢!

4 个答案:

答案 0 :(得分:0)

  1. 提交表格
  2. 查询数据库以查看是否有任何字段值正在使用中
  3. ???
  4. 利润

答案 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 */
  }
}