Php 在codeigniter中获得具有相同电子邮件地址域的用户的最佳方法是什么?
我有这个功能可以让用户获得与当前用户相同的电子邮件地址域。我的问题是在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'), '
<?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();
}
}
?>