有可能会出现,给userid字段添加primary key或unique的唯一索引就不会出现相同的了!

解决方案 »

  1.   

    那意思是不是给userid字段添加primary key或unique的唯一索引后,每次插入时如果userid有相同的,插入会失败。还是说mysql保证SELECT MAX(userid) AS total FROM tbl_user 并插入新的userid可以成功,userid一定是当前的最大值呢?
      

  2.   

    我觉得应该是后一种情况,因为如果唯一索引的话就会出错,auto_increment的话就会自动增1后再插入,不知道我这样理解有没有错?
      

  3.   

    如果要保证用户的唯一性,每次插入时如果userid有相同的,插入当然会失败……
      

  4.   

    主要是看phpbb的用户注册的代码中,看到
    $sql = "SELECT MAX(user_id) AS total
    FROM " . USERS_TABLE;
    if ( !($result = $db->sql_query($sql)) )
    {
    message_die(GENERAL_ERROR, 'Could not obtain next user_id information', '', __LINE__, __FILE__, $sql);
    } if ( !($row = $db->sql_fetchrow($result)) )
    {
    message_die(GENERAL_ERROR, 'Could not obtain next user_id information', '', __LINE__, __FILE__, $sql);
    }
    $user_id = $row['total'] + 1; //
    // Get current date
    //
    $sql = "INSERT INTO " . USERS_TABLE . "   (user_id, username, user_regdate, user_password, user_email, user_icq, user_website, user_occ, user_from, user_interests, user_sig, user_sig_bbcode_uid, user_avatar, user_avatar_type, user_viewemail, user_aim, user_yim, user_msnm, user_attachsig, user_allowsmile, user_allowhtml, user_allowbbcode, user_allow_viewonline, user_notify, user_notify_pm, user_popup_pm, user_timezone, user_dateformat, user_show_quickreply, user_quickreply_mode, user_lang, user_style, user_level, user_allow_pm, user_birthday, user_next_birthday_greeting, user_active, user_actkey) 
    VALUES ($user_id, '" . str_replace("\'", "''", $username) . "', " . time() . ", '" . str_replace("\'", "''", $new_password) . "', '" . str_replace("\'", "''", $email) . "', '" . str_replace("\'", "''", $icq) . "', '" . str_replace("\'", "''", $website) . "', '" . str_replace("\'", "''", $occupation) . "', '" . str_replace("\'", "''", $location) . "', '" . str_replace("\'", "''", $interests) . "', '" . str_replace("\'", "''", $signature) . "', '$signature_bbcode_uid', $avatar_sql, $viewemail, '" . str_replace("\'", "''", str_replace(' ', '+', $aim)) . "', '" . str_replace("\'", "''", $yim) . "', '" . str_replace("\'", "''", $msn) . "', $attachsig, $allowsmilies, $allowhtml, $allowbbcode, $allowviewonline, $notifyreply, $notifypm, $popup_pm, $user_timezone, '" . str_replace("\'", "''", $user_dateformat) . "', $user_show_quickreply, $user_quickreply_mode, '" . str_replace("\'", "''", $user_lang) . "', $user_style, 0, 1, '$birthday', '$next_birthday_greeting', ";总觉得它这样写会有重复的userid