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

标签 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;
}

我有两个选择(伪代码):

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 来实现此目的。

最佳答案

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

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

然后您可以使用 mysql_insert_id()PDO::lastInsertId 检索该值

关于php - 有效检查数据库中是否存在值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48203629/

相关文章:

java - Hibernate 说 database.table 不存在

javascript - 通过 javascript 获取 reCaptcha 值?

php - 将表行拆分为列

php - 如何使用 PHP 从 MySQL 获取数据?我的代码出现错误

php - 下拉列表为空

php - 如何在同一表行上使用变量来回显 foreach 数组?

Doctrine -不带主键的表

testing - 如何编写带有用户身份验证的功能测试?

php - PHP中的多个文件上传 - 重命名文件

php - 如何从 doctrine/symfony 中设置 MysQL 变量(time_zone)?