Определение поля, которое дублируется! - PullRequest
1 голос
/ 10 июля 2011

У меня есть эта регистрационная форма, которая имеет несколько уникальных полей.Теперь при вставке я хочу обнаружить все поля, в которых были опробованы повторяющиеся значения.Как я могу это сделать?Я использую MySQL сервер 5.5.8 и PHP 5.3.Спасибо!

Ответы [ 4 ]

0 голосов
/ 10 июля 2011

Ошибка MySQL вернет только один из ключей, который был нарушен. Поскольку разные значения столбцов могут быть найдены в разных строках, нет простого способа получить их все. Использование запроса типа SELECT * FROM table WHERE column1=val1 OR column2=val2 не будет работать, так как он может использовать любые индексы. Лучше всего сделать несколько отдельных запросов для проверки каждого поля. Если это InnoDB, и вы запрашиваете только для столбца (столбец SELECT из таблицы WHERE column = val), это будет запрос с индексным покрытием, который очень быстрый, даже если у вас миллионы пользователей (и я предполагаю, что мы говорим несколько уникальных полей)

0 голосов
/ 10 июля 2011

Если вы укажете какие-либо ключи, которые не могут иметь дубликаты при создании таблицы (или впоследствии с помощью команды alter table) как уникальные с использованием ограничений уникальных ключей, вставка завершится неудачно. Это заставит mysql_query () вернуть false, и вы можете получить сообщение об ошибке из предыдущей операции mysql, используя myqsl_error (). Примерно так:

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

Я не уверен, что сообщение об ошибке даст вам именно то, что вы ищете, но, по крайней мере, оно снизит ваши дБ.

0 голосов
/ 10 июля 2011

Вы можете зацикливаться на $ _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 */
  }
}
0 голосов
/ 10 июля 2011
  1. отправить форму
  2. запросить в БД, чтобы узнать, используются ли какие-либо из этих значений полей
  3. ???
  4. выгода
...