php - Mysql自增问题

标签 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 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/

相关文章:

php - 如何在Docker容器中为Laravel运行和安装Protractor E2E测试?

php - 将 JSON 数组从 android 发送到 Php

mysql - 访问 cakephp3 Controller 中的非关联表

c# - 使用 C# 通过 cmd.exe 运行多个命令

Mysql 搜索和替换查询 - 转义格式

mysql - 如何在 Solr 搜索中获取精确的列

php - 如何使用php访问浏览器上可见的s3私有(private)图像

php - 查找给定的字符串是否匹配,尽管有输入错误

php - 从 Paypal 传回 'Custom' 值

php - GROUP_BY 中的错误,查询来自两个数据库 CODEIGNITER