每次使用php在SQL数据库中插入新行时生成一个自定义唯一id
我拥有的每次使用php在SQL数据库中插入新行时生成一个自定义唯一id,php,mysql,mysqli,Php,Mysql,Mysqli,我拥有的 因此,我有一个包含3列的表(它实际上有很多列,但为了举例),比如说id,name和email。我有一个网页,用户在其中输入name和email,然后使用php中的mysqli将其保存到MySQL数据库中,id由php使用自动增量生成,所以它就像1,2,3。。。等等。 我想要什么 我不希望id只是一个整数,我希望它是字母和数字的组合,eg.-B201。我想定义在哪种情况下使用哪些字母的规则,我可能还想自己定义数字的一部分,并且数字的一部分将自动递增。 假设用户输入的电子邮件是gmail电
因此,我有一个包含3列的表(它实际上有很多列,但为了举例),比如说
id
,name
和email
。我有一个网页,用户在其中输入name
和email
,然后使用php中的mysqli将其保存到MySQL数据库中,id
由php使用自动增量生成,所以它就像1,2,3。。。等等。我想要什么
我不希望id只是一个整数,我希望它是字母和数字的组合,
eg.-B201
。我想定义在哪种情况下使用哪些字母的规则,我可能还想自己定义数字的一部分,并且数字的一部分将自动递增。假设用户输入的电子邮件是gmail电子邮件,则我希望第一个字符为G,如果是yahoo,则为Y等。
例如-G201,Y201
现在,我想要表示月份的第一个和第二个数字,因此如果它是Nov,那么id应该是
G111
每个新条目的最后一位数字应自动递增。
我在谷歌上寻找帮助,但找不到任何好东西(也许我的谷歌搜索技能很差)。
我被困的地方
决定php中的前三个字符非常简单,我可以检查用户发布的电子邮件字符串并决定第一个字母,对于下一个数字,我可以检查当前日期时间并按当前月份决定。
真正的问题是最后一部分,它是自动递增的,我不知道怎么做。当插入新行时,php脚本如何知道上次插入的值是多少,以便这次可以将+1添加到自动增量值中。
因此,如果有人能帮助我在php中生成一个类似的字符串,这样我就可以将其保存到数据库中,我将非常感激。好的,您可以使用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 ];
你到底有什么问题?为什么不生成要查找的ID并检查它是否存在于数据库中?我不能,请稍候,我将编辑问题并进一步解释。在插入之前,选择max(ID),使用substr从结果中获取数字,添加一个,用字母表连接该数字,插入,如果没有id,则静态地将1放入id
$generate\u id=mysqli\u insert\u id($connection)代码>谢谢这是我需要的。我不明白为什么人们一直对我的问题投反对票。很高兴我能帮上忙。顺便说一句,文档说mysqli_insert_id()代码>返回上次查询生成的id,如果我在上次插入后进行了其他查询(如读取内容或表格或编辑它),该怎么办。Willmysqli_insert_id()代码>仍然有效。函数是:mysqli insert id(足够描述性):这意味着获取生成的最后一个插入id。这与选择或更新查询无关。此外,在执行insert查询之后,您将获得最后一个insert id,这里不可能发生冲突,除非您在返回最后一个insert id的表之后插入另一个表。