Mysql自动增量问题

时间:2017-03-25 11:25:09

标签: php mysql

 function randomUnique(){    
        return $randomString =rand(0, 9999); //generate random key    
    }

    function insert($uid,$name,$email){
            $link = mysqli_connect("localhost", "root", "", "dummy");        
             $query = "insert into `usertbl`(`uid`,`name`,`email`) 
                       values('".$uid."','".$name."','".$email."');";
            if(mysqli_query($link, $query)){        
                return $rval = 1;
            }else if(mysqli_errno($link) == 1062){          
                insert(randomUnique(),$name,$email);
            }else if(mysqli_errno($link != 1062)){          
               return $rval = 2;// unsuccessful query           
            }
        }


        $uid = randomUnique();
        $name = "sam";
        $email = "sam@domain.com";
        $msg_code = insert ($uid,$name,$email);
        echo $msg_code;

表格中有4列: id(PK AI),uid(varchar唯一),name(varchar),email(varchar)。 当我想创建一个新的用户条目时。使用函数' randomUnique()'生成随机密钥。我有列' id'设置为AI,因此它尝试输入详细信息,但如果密钥重复,则从mysql返回错误号1062.除了设置为AI的id列之外,其他运行良好。如果一个键是重复的,则跳过一次列值。 上面的代码是一个递归函数,所以在列' id'中跳过了值的数量。与函数调用的次数成正比。

示例:

id | uid  |   name |   email
1  |  438 |   dan  |  dan@domail.com
2  | 3688 |  nick  | nick@domain.com
4  | 410  |  sid   | sid@domain.com

在这里,我们可以看到数字3跳过了bcoz,随机数函数给了我们一个数字438或3688,这往往会抛出一个错误,我们的递归函数重复跳过数字3并在下次成功执行时输入4。

我需要修复自动增量,以便将值输入正确的序列。 我无法改变表格的结构。

3 个答案:

答案 0 :(得分:1)

在执行uid操作之前,您可以检查是否已存在INSERT条目,例如

SELECT COUNT(*) FROM table WHERE uid = '$uid';

这将返回具有新生成的uid的count条记录。只有当count为0时,您才能检查INSERT并执行count。如果不是,您可以再次调用function以生成更加随机的值。

答案 1 :(得分:1)

在每个函数调用中你正在创建新的db链接,可能是针对这种情况提供的php mysqli_close($link);

您要么关闭连接

  if(mysqli_query($link, $query)){        
            return $rval = 1;
        }else if(mysqli_errno($link) == 1062){
            mysqli_close($link);          
            insert(randomUnique(),$name,$email);
        }else if(mysqli_errno($link != 1062)){          
           return $rval = 2;// unsuccessful query           
        }

或者简单地将DB连接置于功能

之外
$link = mysqli_connect("localhost", "root", "", "dummy");   
function insert($uid,$name,$email){

答案 2 :(得分:0)

使用PHP的uniqid函数,它会生成一个合适的唯一函数。

http://php.net/manual/en/function.uniqid.php

这是用来做什么的?您可以使用id列,它将执行得更快,并且已经保证是唯一的。