Php 识别要复制的字段!

Php 识别要复制的字段!,php,mysql,unique,duplicates,Php,Mysql,Unique,Duplicates,我有这个登记表,它有几个独特的字段。现在在插入时,我想检测所有尝试重复值的字段。我该怎么做?我使用的是MySQL服务器5.5.8和PHP5.3。谢谢 提交表格 查询数据库以查看这些字段值中是否有任何一个正在使用 ??? 利润 如果在创建表时或之后使用alter table命令使用unique key约束将任何不能具有重复项的键指定为unique,则插入将失败。这将导致mysql_查询返回false,您可以使用myqsl_error从之前的mysql操作中获取错误消息。大概是这样的: if(mys

我有这个登记表,它有几个独特的字段。现在在插入时,我想检测所有尝试重复值的字段。我该怎么做?我使用的是MySQL服务器5.5.8和PHP5.3。谢谢

提交表格 查询数据库以查看这些字段值中是否有任何一个正在使用 ??? 利润
如果在创建表时或之后使用alter table命令使用unique key约束将任何不能具有重复项的键指定为unique,则插入将失败。这将导致mysql_查询返回false,您可以使用myqsl_error从之前的mysql操作中获取错误消息。大概是这样的:

if(mysql_query("INSERT INTO tbl VALUES ('1','2','3'))
{
    //success code
}
else
{
    $error_string = mysql_error();
    //handle error
}

我不确定错误消息是否会准确地告诉您您要查找的内容,但至少它可以降低您的数据库开销。

您可以循环使用$\u POST或$\u 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 */
  }
}

MySQL错误将只返回一个被violidated的键。由于可以在不同的行中找到不同的列值,因此没有简单的方法可以获取所有列值。在column1=val1或column2=val2的表中使用类似SELECT*的查询将不起作用,因为它可以使用任何索引。对每个字段进行几个单独的查询是更好的方法。如果这是InnoDB,并且您仅查询列SELECT column FROM table WHERE column=val,那么这将是索引覆盖的查询,速度非常快,即使您有数百万用户,并且我假设我们谈论的是几个唯一字段

您是指提交的表单中的重复值吗,或者数据库中已有的重复数据?数据库中已有的重复值@Michael@Marc我正在寻找一个解决方案,导致最小的数据库开销。那么MySQL返回的字段的基数是否有任何值?使用mysqli_error,它会返回约束名称,如键“eo_username”的重复条目“nagi”_UNIQUE@6nagi9,开销最小的解决方案可能是查询最少的解决方案;正因为如此,我认为最好的方法是捕获任何触发的数据库错误。除非您想取出所有键并在PHP中进行搜索,否则只需快速查询并查看它们是否在数据库中。或者尝试插入,看看是否失败。无论哪种方式,你都在打DB。一个简单的选择计数*其中。。。非常小。@zneak所以我想我需要解析上面唯一的eo_用户名。这是唯一的办法吗??MySQL不返回键位置吗??因为如果没有,我最好还是照@Mark说的去做。@6nagi9,约束名称是固定的,所以如果MySQL告诉你有一个重复的key,你可以简单地用数组映射约束名称来形成字段名,例如,它将包含eo_username_UNIQUE=>username和一个正则表达式,用于从错误消息中查找约束名称,类似于键“+”的/Duplicate entry“.*”。修剪值不是清理输入。如果您想检查一个值在一个数组中是否多次出现,只需使用array\u count\u值即可。然而,这与问题无关。在一个数组中加载整个表是不明智的,问题是关于多个列。这是一种方法,但它不能帮助您发现哪些字段被复制。此外,如果这是一个数据库问题,为什么地狱般的OP用php标记它?我在未回答的php问题中找到了它:-\你误解了@Nilesh这个问题。虽然我的db是MyISAM,但我已经实现了这个方法。我有三个独特的领域。