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。
我需要修复自动增量,以便将值输入正确的序列。 我无法改变表格的结构。
答案 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列,它将执行得更快,并且已经保证是唯一的。