PDO有效的SELECT和INSERT

我是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());
            }
}

解决方法:

散列函数的速度可能很慢-因为您为所有用户设置的密码都相同,因此可以将该计算移出循环. (这应该很慢,因为通常会在一定数量的“回合”中重复执行哈希操作,以使暴力破解更加困难.)

我无法从您的代码中得知您是否对每个哈希使用了随机盐.如果您是(并且应该是),那么此建议将使您留下许多用相同的盐散列的密码.我不确定您将它们都设置为相同值会带来多大的风险.

我个人会尝试提出一种不预设密码的解决方案-例如生成一个随机令牌,我向每个用户发送电子邮件,以便他们可以为自己创建一个新密码. (总之您可能需要让用户重设忘记的密码.)

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...