Php 如何在id_列中添加自动生成的字母数字键

Php 如何在id_列中添加自动生成的字母数字键,php,mysql,laravel,Php,Mysql,Laravel,发生的情况是,用户来到网站,填写并创建一个新的产品表单,其中包含标题、描述、价格等字段 我想在我的“id”列中存储一个唯一生成的字母数字键,该列默认设置为自动增量,使用该唯一键作为我的产品id。就像每个Youtube视频都有自己生成的唯一键,而不是像“1”、“2”、“3”这样的id 我使用“uniqid();”函数生成该密钥 如果我做错了,请告诉我,或者有更好的方法来做这件事。我是个十足的新手。以下两件事不可能同时发生: 唯一生成的字母数字键 “id”列,默认设置为自动增量 不能使用自动递增

发生的情况是,用户来到网站,填写并创建一个新的产品表单,其中包含标题、描述、价格等字段

我想在我的“id”列中存储一个唯一生成的字母数字键,该列默认设置为自动增量,使用该唯一键作为我的产品id。就像每个Youtube视频都有自己生成的唯一键,而不是像“1”、“2”、“3”这样的id

我使用
“uniqid();”
函数生成该密钥


如果我做错了,请告诉我,或者有更好的方法来做这件事。我是个十足的新手。

以下两件事不可能同时发生:

  • 唯一生成的字母数字键
  • “id”列,默认设置为自动增量
不能使用自动递增的字母数字键,因为根据定义,字母数字意味着用字母和数字创建的字符串,而不能自动递增字母,这有意义吗

因此,我的建议是,将“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

更新

为了在url中显示字母数字的唯一id,您需要将url结构从
/localhost/product/product\u id
更改为
/localhost/product/product\u unique\u id
,我假设您的产品在某个地方列出了某种超链接,单击它可以将用户带到产品详细信息页面,对吧?

假设您有一个id为1且唯一id为lt4Zhr7的产品,那么在列出产品的地方,您可以给出产品的唯一id,如下所示:

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


这是一个基本的解决方案,应该能够引导您朝着正确的方向前进,您的实际代码可能会因您使用的框架或其他因素而有所不同。

为什么要同时使用自动递增的数据库值和
uniqid()
?不,我只想使用生成的“uniqid();”值。当您为列指定类型auto increment时,基本上会从该列中删除特权。如果你想自己分配一些值,那么它就违背了自动分配的目的。我如何在URL中显示那个唯一的ID?创建产品时,我的URL是“/localhost/product/product\u id”例如“/localhost/product/4”。我希望它类似于“/localhost/product/lt4Zhr7”,这个答案应该被接受。这是一个非常合理的解决方案。uniqueid尽可能接近一个真正独特的、甚至加密安全的(这远远超出了问题的范围,但仍然很好)随机ID。“学习者”是对的。不能将自动递增和字符串放在同一列中。谢谢@Andrei。OP,我更新了我的答案,让您了解如何使用唯一id加载产品。谢谢@Learner。但是如何在openssl_random_pseudo_bytes()中添加前缀?简单的PHP连接<代码>$uniqueId='prefix'.bin2hex(openssl_random_pseudo_bytes($bytes))应该可以吗?