Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每次使用php在SQL数据库中插入新行时生成一个自定义唯一id_Php_Mysql_Mysqli - Fatal编程技术网

每次使用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,如果我在上次插入后进行了其他查询(如读取内容或表格或编辑它),该怎么办。Will
mysqli_insert_id()仍然有效。函数是:mysqli insert id(足够描述性):这意味着获取生成的最后一个插入id。这与选择或更新查询无关。此外,在执行insert查询之后,您将获得最后一个insert id,这里不可能发生冲突,除非您在返回最后一个insert id的表之后插入另一个表。