如何在id_column

时间:2019-06-24 07:59:48

标签: php mysql laravel

发生了什么事,用户进入网站,填写了标题,描述,价格等字段的新产品表格...

我想在“ id”列中存储一个生成的唯一字母数字键,该键默认情况下设置为auto_increment,请将该唯一键用作我的product_id。就像每个YouTube视频都有自己生成的唯一密钥一样,而不是像'1','2','3'这样的ID。...

我正在使用"uniqid();" 功能生成该密钥。

如果我做错了,或者有更好的方法,请告诉我。我是一个完整的新秀。

1 个答案:

答案 0 :(得分:1)

以下两件事不能同时成立:

  • 唯一生成的字母数字键
  • “ id”列,默认情况下设置为auto_increment

您不能使用auto_increment的字母数字键,因为根据定义,字母数字意味着使用字母和数字创建的字符串,并且您不能自动对字母进行增量,这有意义吗?

所以我的建议是,您将“ id”键数字保留为1、2、3等,并在表中再创建一列,将其命名为“ unique_id”。当然,您可以随意命名。它必须是VARCHAR(255)类型。

然后使用以下功能填充该列:

$bytes = 12;
$uniqueId = bin2hex(openssl_random_pseudo_bytes($bytes)); //this will create 24 char alphanumeric string, you can increase or decrease it by changing the $bytes

并将此$uniqueId放入您的列中,瞧,您拥有实体的唯一ID。

更新

为了在您的网址中显示字母数字唯一ID,您需要将网址结构从/localhost/product/product_id更改为/localhost/product/product_unique_id,我假设您的产品在某处列出了某种超链接,单击哪个将用户带到产品详细信息页面,对吗?

假设您有一个ID为1且唯一ID为lt4Zhr7的产品,因此只需在列出产品的地方,就可以像下面这样给出该产品的唯一ID:

<a href="/localhost/product/lt4Zhr7"> Product 1 </a>

这是一个基本的解决方案,可以指导您正确的方向,根据您使用的框架或其他因素,您的实际代码可能会有所不同。