Php 如何避免数据库中的重复用户名

Php 如何避免数据库中的重复用户名,php,Php,我想用新用户名检查数据库中的用户名。 如果找到用户名,请至少按数字重新生成用户名 或者在名字和姓氏后面加上一个漂亮的字符 并再次检查新生成的用户名是否也不存在 如果不存在,请运行要插入的查询 我想要这个的原因是因为我不想要重复的用户名 在数据库中 我试过了,但不管用 请帮忙 <?php //check if username already exists function checkusername($username){ global $dbc_conn, $table

我想用新用户名检查数据库中的用户名。 如果找到用户名,请至少按数字重新生成用户名 或者在名字和姓氏后面加上一个漂亮的字符 并再次检查新生成的用户名是否也不存在

如果不存在,请运行要插入的查询

我想要这个的原因是因为我不想要重复的用户名 在数据库中

我试过了,但不管用 请帮忙

<?php
    //check if username already exists

function checkusername($username){
    global $dbc_conn, $table_name;

    //CHECK IF A USERNAME EXISTS
    $query = mysqli_query($dbc_conn,"SELECT COUNT(username) FROM $table_name WHERE username ='{$username}'");
    $rows   =   mysqli_fetch_row($query);
    if(count($rows) > 0){
        return false;
    }else{
        return true;
    }
}



//This function create new account

function signup($fname, $lname , $regemail , $regpassword , $gender , $school , $day,$month,$year,$school){

    global $dbc_conn, $table_name;

    //CHECK IF EMAIL ALREADY EXISTS
    $query = mysqli_query($dbc_conn,"SELECT Email FROM $table_name WHERE Email ='{$regemail}'");

    if (mysqli_num_rows($query) > 0 ){
        $error ="<div class='error'><strong> <i class='fa fa-exclamation-triangle'></i> </strong>Sorry, It looks like you already have an account with us.</div>";

    }else{

        $username = strtolower($fname.$lname);

        //Check if username is do not exists, and if it exist
        while(checkusername($username)){
            //INSERT INTO DATABASE
            $query = "INSERT INTO users 
                            (username,FirstName,LastName,Email,
                             Password,Month,Day,Year,Gender,cell_group) 
                      VALUES(?,?,?,?,?,?,?,?,?,?)";

            //PREPARE QUERY
            $prepare = $dbc_conn ->prepare($query);

            //BIND QUERY
            $prepare->bind_param("ssssssisis",$username,$fname, 
                                              $lname , $regemail , 
                                              md5($regpassword) , $gender , 
                                              $school , $day,
                                              $month,$year,$school);

            //execute requery
            if($prepare->execute()){

                //SET SESSION
                $_SESSION['usigh-ses'] = mysqli_insert_id($dbc_conn);
                header("location:gettingstarted.php");

               //close connection
                mysqli_close($dbc_conn);
                exit;       
            };
        }

    }

}

?>

请详细说明它是如何“不起作用”的。将其作为唯一键,然后捕获异常因为您使用COUNT,将始终返回一行,但如果没有匹配的记录,则值将为0。最好只选择并检查是否返回了任何行。将代码划分为多个函数,以便更容易理解。另外,我认为您的select语句在这里打破了$table_name中的
select COUNT(username),其中username='{$username}'“
是否要在此处使用花括号?添加唯一密钥将更好地确保用户名不会重复,但是您仍然需要处理代码中的逻辑,这样您的查询就不会神秘地失败。请详细说明它是如何“不起作用”的。将它作为唯一键,然后捕获例外情况使用COUNT时,将始终返回一行,但如果没有匹配的记录,则值将为0。最好只选择并检查是否返回了任何行。将代码划分为多个函数,以便更容易理解。另外,我认为您的select语句在这里打破了$table_name中的
select COUNT(username),其中username='{$username}'“
您想在这里放上花括号吗?添加一个唯一的密钥可以更好地保证用户名永远不会被复制,但您仍然需要处理代码中的逻辑,这样您的查询就不会神秘地失败。”