我正在创建一个用户注册表单,当我通过电子邮件确认用户的电子邮件时,我需要某种独特的字符串来确认。
我没有在PHP中生成一个并将其插入到数据库中,而是想尝试在我的表中添加一个列,该列将保存一个我可以在需要确认时使用的唯一值。
我想要做的是将值设置为当前时间戳的MD5。我试着在phpMyAdmin中做SELECT MD5(CURRENT_TIMESTAMP)
只是为了看看它是否会让我这样做,我想我会把它添加到更新条件但它似乎没有让我。
ALTER TABLE users ADD confirmation VARCHAR(40) DEFAULT NULL ON UPDATE MD5(CURRENT_TIMESTAMP);
以上是我尝试过的。我收到错误,我不知道该怎么做。
无论如何我能做到这一点或类似的事情吗?附带问题,ON UPDATE
是否触发了刚刚插入的行?
答案 0 :(得分:0)
为此目的使用通用唯一标识符。这是一个128位的唯一编号;它是为这种东西而设计的。
它有一个符合36个字节的字符串表示。
aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
您可以使用大多数编程语言生成这些内容。在MySQL中,您使用UUID()函数来获取一个。每次调用UUID()时,都可以保证获得新值。
将CHAR(36)列添加到数据库,或者只使用VARCHAR(40)列。
除了本机时间戳之外,您不能使用数据定义语言(ALTER TABLE)来声明ON UPDATE。您需要应用程序代码来设置UUID值,就像您对MD5(CURRENT_TIMESTAMP)所做的那样。
答案 1 :(得分:0)
您尝试使用的语法不存在。看起来您正在考虑ON UPDATE CURRENT_TIMESTAMP
,但根据https://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html
使用DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP是 特别是TIMESTAMP。
因此ON UPDATE
子句仅适用于CURRENT_TIMESTAMP
,且仅适用于TIMESTAMP
类型的字段。
如果您想使用当前时间戳的MD5设置触发器,或者只是手动设置值(例如UPDATE users SET confirmation=MD5(CURRENT_TIMESTAMP()) WHERE user_id=123
)。
请记住,当前时间戳的MD5可能很容易被猜到/暴力强迫,所以不要依赖它来保证安全。