php - 为 MySQL 唯一字段生成唯一值

标签 php mysql unique

例如,当用户注册我的网站时,我创建一个长度为 40 的唯一字符串并将其插入数据库中。然后,我们向新注册的用户发送一封电子邮件,其中包含 URL 形式的唯一字符串,一切正常。 但是,如何创建和插入此注册实体以确保具有唯一属性的字段实际上是唯一的?

我目前的方法如下:

$key = '';
$repeat = true;
while ($repeat) {
    $key = generate_hash(40);
    $is_unique = (count($model->get_by_key($key)) === 0) ? true : false;
    $repeat = ($is_unique) ? false : true;
}
// At this point I know the key is unique and can insert it...

我对这段代码不满意,因为我通常试图避免 while 循环。有没有更好的方法来实现我在这里所做的事情?

底线是包含这些键的 MySQL 字段具有唯一属性,我需要知道插入这些键时不会发生唯一违规。

最佳答案

好吧,基本上你有两种方法。

  1. 让数据库处理此问题并使用 UUID() 创建可在电子邮件中使用的唯一标识符。

    根据您的 MySQL 版本,您有一些选项:

    A.使用MySQL 4.1及更高版本,您可以直接通过 INSERT INTO 使用该函数:

    INSERT INTO table_name 
        (unique_id, field1, field2) 
    VALUES 
        (UUID(), "smth", "smth")
    

    B.使用MySQL 5.0,您可以创建一个触发器并在插入时自动填充唯一字段:

    CREATE TRIGGER 
    unique_id
    BEFORE INSERT ON 
    table_name 
    FOR EACH ROW
    SET NEW.unique_id = UUID()
    
  2. 您可以通过编程方式检查生成的 id 是否确实唯一。与您现在所做的相同,但您可以像这样重构代码:

    $key = generate_hash(40);
    while ( count($model->get_by_key($key)) ) {
        $key = generate_hash(40);
    }
    
    //here you have an unique id in $key 
    

关于php - 为 MySQL 唯一字段生成唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28295545/

相关文章:

PHP Foreach 循环效率

php - 如何从另一个执行php脚本?

php - 在 PHP 中更改数组值时插入复选框

java - 创建用户 ID(0001、0002 等)CORBA/Java

sql - nvarchar 类型的唯一列

php - 按顺序显示项目,包括图像 WooCommerce

php - PHP : got nothing with printing the array 中的 SQL 查询

mysql - 链接表可以有两个互斥的列吗?

mysql - Express.js 没有添加到 mysql

arrays - 消除元素顺序不同的重复向量