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 unique)、姓名
(varchar)、电子邮件
(varchar)。
当我想创建一个新的用户条目时。使用函数“randomUnique()”生成一个随 secret 钥。并且我将“id”列设置为 AI,以便它尝试输入详细信息,但如果该 key 重复该错误数字 1062 从 mysql 返回。除了 id 列设置为 AI 之外,一切运行良好。如果一个键重复,则列值将被跳过一次。
上面的代码是一个递归函数,因此“id”列中跳过的值的数量与调用该函数的次数成正比。
示例:
id | uid | name | email
1 | 438 | dan | dan@domail.com
2 | 3688 | nick | nick@domain.com
4 | 410 | sid | sid@domain.com
在这里,我们可以看到数字 3 已跳过,因为随机数字函数给了我们一个数字 438 或 3688,这往往会抛出错误,并且我们的递归函数会重复一次跳过数字 3 并在下次成功执行时输入 4。
我需要修复自动增量,以便它将值输入到正确的序列中。 我无法更改表的结构。
最佳答案
在执行 INSERT
操作之前,您可以检查是否已存在具有该 uid
的条目,例如
SELECT COUNT(*) FROM table WHERE uid = '$uid';
这将返回具有新生成的 uid 的记录的计数
。仅当 count
为 0 时,您才可以检查此 count
并执行 INSERT
。如果不是,您可以调用 函数
再次生成另一个随机值。
关于php - Mysql自增问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43015751/