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

Php 在codeigniter中获得具有相同电子邮件地址域的用户的最佳方法是什么?,php,mysql,codeigniter,Php,Mysql,Codeigniter,我有这个功能可以让用户获得与当前用户相同的电子邮件地址域。我的问题是在codeigniter中有没有更好的方法来实现这一点 我的代码是 <?php public function sr_get_identical_users() { $user_email = substr( $this->session->userdata('email'), strrpos( $this->session->userdata('email'), '

我有这个功能可以让用户获得与当前用户相同的电子邮件地址域。我的问题是在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();
    }
?>
谢谢。非常感谢您的输入。

您应该在查询中包含@字符,以便在其电子邮件地址中查找具有相同域的用户。否则,您将面临多个不同域的不必要匹配的风险。例如,域mail.com将在您的查询中将用户与电子邮件匹配name@gmail.com和name@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();
    }
?>

还考虑安全性,避免从用户表中选择所有数据,如果包含敏感数据和散列密码等。如果您在该表中不需要特定的列,则仅出于性能原因选择特定列。解释这一点可能有助于回答您的问题。我正在制作一个共享功能。同一域的用户可以与其他用户共享他的故事。这是包含@的一个好观点。我的用户会收到公司的电子邮件,所以这不太可能,但绝对有可能。

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