【发布时间】:2018-04-17 06:16:13
【问题描述】:
假设数据库中有大约 200,000 条记录。 这里 do-while 最多可以执行 200,000 次。这意味着它将调用 DB 200,000 次。
我的问题:这是正确的方法吗?有没有更好的办法?
function get_new_key() {
do {
$new_key = 'some_xyz';
} while ( function_call_to_check_newKey_exists_in_db );
return $new_key;
}
【问题讨论】:
-
为什么你使用循环来检查数据库中是否存在新键?你的逻辑的实时场景是什么?
-
并非如此,它的效率非常低;但是如果没有更多关于你真正想要做什么的信息,很难建议你应该采取什么方法......例如new_key 是从哪里来的?
-
在循环中调用 db 操作几乎永远不会有效。也许使用
UUID创建ID? php.net/manual/en/function.uniqid.php -
这里新密钥的意思是:$new_key = hash('sha256', time() . mt_rand()); (PHP 代码)
-
如果你的 MySQL 表中的键列设置为唯一,你会得到一个重复的错误,你可以像
if (mysqli_errno() == 1062) { // generate new key }那样处理它,我希望你使用像 stackoverflow.com/a/31460273/342740 这样的东西来生成您的随机密钥或类似的安全但独特的方法。您需要多少次重新生成密钥取决于生成密钥的算法有多好/独特/安全。