我想生成唯一值并将其保存在数据库中。
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/