PHP проверяет БД на наличие повторяющегося номера перед добавлением нового - PullRequest
0 голосов
/ 18 ноября 2011

Я работаю над плагином WordPress и пытаюсь сгенерировать уникальный «пин-код» при добавлении строки в таблицу.Булавка должна быть числовой строкой (8 символов, но это не важно).В таблице будут сохранены некоторые пользовательские данные и даты.

Но я борюсь с тем, чтобы перед вставкой строки у меня был уникальный пин-код.До сих пор я пытался использовать оператор if, но он будет работать только в том случае, если случайный пин-код сопоставлен один раз.

Я использую mt_rand для проверки «пин-кода», а затем проверяю DB, чтобы увидеть, если этот пин-кодсуществует (он должен быть уникальным).Я думаю, что мне нужно сделать цикл for, но я изо всех сил (только когда-либо использовал foreach lopps)

Пока у меня есть это, но я знаю, что это не правильно (это может работать, но я бы несколько вложенных ifs иэто будет ограничено количеством ifs на месте):

function pin_generator_create_pin(){
  global $wpdb;
   $pin = mt_rand(109076, 999999);

   if(!$wpdb->get_var("SELECT * FROM ".PIN_GENERATOR_TABLE." WHERE pin=".$pin)){
     return $pin;
   }else{

     $pin = mt_rand(109076, 999999);
       if(!$wpdb->get_var("SELECT * FROM ".PIN_GENERATOR_TABLE." WHERE pin=".$pin)){
       return $pin;
       }
   }
}//function

Кто-нибудь может увидеть, что я пытаюсь сделать?

Помогите, пожалуйста.

1 Ответ

0 голосов
/ 18 ноября 2011

Вам нужно использовать цикл while, что-то вроде этого:

function pin_generator_create_pin(){
    global $wpdb;

    $pin = 0;
    $pinExists = true;
    while ($pinExists) {
        $pin = mt_rand(109076, 999999);
        if(!$wpdb->get_var("SELECT * FROM ".PIN_GENERATOR_TABLE." WHERE pin=".$pin))
            $pinExists = false;
    }

    return $pin;
}//function
...