我有此功能可以为用户提供与当前用户相同的电子邮件地址域。 我的问题是在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();
}
?>
感谢。感谢您的意见。
答案 0 :(得分:1)
您应在查询中包含@
字符,以便在其电子邮件地址中查找具有相同域的用户。如果不是,您将冒险获得多个不同域的不需要的匹配。例如,您的查询中的域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();
}
?>
也许您已经知道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
表中选择所有数据。如果您有很多列,那么出于性能原因,只选择特定列的良好做法这个特殊目的不需要表格。