我是 PHP
和 PDO
的初学者。
下面的代码有效,但速度非常慢。有没有办法让它更有效率?while()
效率不高,但可以完成工作。我尝试过其他解决方案,但没有任何效果。
有什么建议么?
public function register_new_member(){
global $bcrypt;
global $populera;
$query = $this->db->prepare("SELECT id, lid, firstname, surname FROM `members`");
try{
$query->execute();
while ($data = $query->fetch()){
$id = $data['id'];
$lid = $data['lid'];
$username = $populera->create_username($data['firstname'],$data['surname']);
//Show data
echo "<br>Username: ".$username;
echo "<br>ID: ".$id;
echo "<br>LID: ".$lid;
//Static password - change after login
$password = "password";
//Bcrypt
$pass = $bcrypt->generateHash($password);
//Show data
echo "<br>Password: ".$pass;
$query2 = $this->db->prepare("INSERT INTO `login` (`id`, `lid`, `user`, `password`) VALUES (?, ?, ?, ?) ");
$query2->bindValue(1, $id);
$query2->bindValue(2, $lid);
$query2->bindValue(3, $username);
$query2->bindValue(4, $pass);
$query2->execute();
}
//Success?
echo "<br>Saved!";
}catch(PDOException $e){
die($e->getMessage());
}
}
最佳答案
散列函数可能很慢——因为您为所有用户设置相同的密码,您可以将此计算移出循环。 (它应该很慢,因为散列通常会重复一定数量的“轮次”以使蛮力变得困难。)
我无法从您的代码中判断您是否为每个散列使用随机盐。如果你是(而且你应该是),那么这个建议会给你留下许多用相同盐散列的密码。我不确定这有多大风险,因为您无论如何都将它们设置为相同的值。
就我个人而言,我会尝试提出一个我没有预设密码的解决方案——例如生成一个随机 token ,我通过电子邮件发送给每个用户,以便他们可以为自己创建一个新密码。 (无论如何,您可能需要让用户重置忘记的密码。)
关于php - PDO 有效的 SELECT 和 INSERT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27593263/