在codeigniter中获取具有相同电子邮件地址域的用户的最佳方法是什么?

时间:2017-03-24 21:06:30

标签: php mysql codeigniter

我有此功能可以为用户提供与当前用户相同的电子邮件地址域。 我的问题是在codeigniter中有更好的方法吗?

我的代码是

<?php
    public function sr_get_identical_users()
    {
        $user_email = substr( $this->session->userdata('email'), strrpos( $this->session->userdata('email'), '@' ) + 1 );
        $this->db->like('email', $user_email, 'before');
        $query = $this->db->get('users');
        return $query->result_array();
    }
?>

感谢。感谢您的意见。

1 个答案:

答案 0 :(得分:1)

您应在查询中包含@字符,以便在其电子邮件地址中查找具有相同域的用户。如果不是,您将冒险获得多个不同域的不需要的匹配。例如,您的查询中的域mail.com会将用户与电子邮件name@gmail.comname@hotmail.com等匹配。

在您的示例中,您可以删除+1以包含@字符:

<?php
    public function sr_get_identical_users()
    {
        $user_email = substr( $this->session->userdata('email'), strrpos( $this->session->userdata('email'), '@' ));
        $this->db->like('email', $user_email, 'before');
        $query = $this->db->get('users');
        return $query->result_array();
    }
?>

也许您已经知道session->userdata中的电子邮件地址有效,但我可能会在执行查询之前验证电子邮件地址:

<?php
    public function sr_get_identical_users()
    {
        $email = $this->session->userdata('email');
        // CHECK IF EMAIL ADDRESS IS VALID
        if (($email = filter_var($email, FILTER_VALIDATE_EMAIL)) !== false) {
            $email = substr($email, strrpos($email, '@')); // EXTRACT DOMAIN PART
            $this->db->like('email', $email, 'before');
            $query = $this->db->get('users');
            return $query->result_array();              
        }
    }
?>

还要考虑安全性,并且如果它包含敏感数据和散列密码等,请避免从users表中选择所有数据。如果您有很多列,那么出于性能原因,只选择特定列的良好做法这个特殊目的不需要表格。

相关问题