代码之家  ›  专栏  ›  技术社区  ›  Vaibhav Vishal

每次使用php在SQL数据库中插入新行时生成一个自定义唯一id

  •  -3
  • Vaibhav Vishal  · 技术社区  · 7 年前

    我所拥有的
    所以我有一个表,有3列(实际上有很多列,但举例来说),让我们说 id ,则, name email .我有一个用户输入的网页 名称 电子邮件 并在php中使用mysqli将其保存到MySQL数据库中, 身份证件 由php使用自动增量生成,所以它类似于1,2,3。。。等等
    我想要什么
    我不希望id只是一个整数,我希望它是字母和数字的组合, eg.- B201 。我想定义在这种情况下使用哪些字母的规则,我可能还想自己定义数字的一部分,部分数字将自动递增。
    比如说,如果用户输入的电子邮件是gmail电子邮件,那么我希望第一个字符是G,如果是yahoo,则是Y等等。 eg.- G201,Y201
    现在,我想要的第一个和第二个数字表示月份,所以如果它是Nov,那么id应该是 G111
    每个新条目的最后一位数字应自动递增。
    我在谷歌上寻找帮助,但找不到任何好东西(也许我的谷歌搜索技能很差)。
    我被困的地方
    决定php中的前三个字符非常简单,我可以检查用户发布的电子邮件字符串并决定第一个字母,对于下一个数字,我可以检查当前日期时间并按当前月份决定。
    真正的问题是最后一部分,它是自动递增的,我不知道怎么做。当插入新行时,php脚本如何知道上次插入的值是多少,以便可以在这次的自动增量值中添加一个+1。
    因此,如果有人能帮助我在php中生成一个类似的字符串,以便我可以将其保存到数据库中,我将非常感激。

    1 回复  |  直到 7 年前
        1
  •  1
  •   John Zenith    7 年前

    那么,您可以使用mysqli last insert id,而不是自己生成整数:

    // Note: you must call the mysqli_insert_id()
    // function  after the insert query
    
    $generate_id = mysqli_insert_id( $connection );
    
    // Get the first character from the email server
    // gmail.com will be: G
    // yahoo.com will be: Y
    // and so on...
    $generate_char = strtoupper( explode( '@', $email_here)[ 1 ][ 0 ] );
    
    // Concatenate the generated values
    $unique_id = $generate_char . $generate_id;
    

    就是这样。

    请注意,字符串可以作为数组进行操作,例如:

    $str = 'gmail.com';
    

    要获得第一个字母:g,可以使用如下数组表示法:

    $first_letter = $str[ 0 ];