有效检查数据库中是否存在值

时间:2018-01-11 09:30:05

标签: php mysql doctrine

我想生成唯一值并将其保存在数据库中。

function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

我有两个选择(PSEUDO CODE):

1)

$allValues = 'SELECT unique_number FROM table'; //EXAMPLE!

$number = generateRandomString();

while(in_array(number, $allValues)) {
    $number = generateRandomString();
}

2)

function getUniqueNumber($uniqueNumber) {
    return 'SELECT unique_number FROM table WHERE unique_number = ' . $uniqueNumber; //EXAMPLE!
}

$number = generateRandomString();

while(getUniqueNumber($unique)) {
    $number = generateRandomString();
}

但如果我有超过100,000条记录,这两种方法效率都很低。

更好的方法是检查数据库中是否存在值,如果存在则生成新值?

我也可以使用Doctrine。

1 个答案:

答案 0 :(得分:0)

如果您只需要该表中的唯一值,最简单的方法是在该表上插入一个自动增量字段,因此在每次插入时,数据库都会为您创建:

ALTER TABLE `users` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY

然后,您可以使用mysql_insert_id()PDO::lastInsertId

检索该值