首页 > 解决方案 > 在 MySQL 中存储 IP 地址的问题

问题描述

我正在为我的网站制作密码重置功能,并决定记录请求的 IP 地址,以防它被报告为错误。

作为一个函数,这就是我所拥有的,用于在初始请求时存储所有信息:

public function insert($memberId, $token)
    {
  if (!empty($_SERVER['HTTP_CLIENT_IP'])){
  $ip=$_SERVER['HTTP_CLIENT_IP'];
}elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
  $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
  $ip=$_SERVER['REMOTE_ADDR'];
}
$ip = ip2long($ip);
        $query = 'INSERT INTO password_reset (member_id, password_recovery_token, expire_at, ip_address, is_valid) VALUES (?, ?, ?, ?, ?)';
        $paramType = 'sssii';
        $time = date('Y-m-d H:i:s');
        
        // expire the token after 12 hours
        $RESET_TOKEN_LIFE = '12 hours';
        $expireAt = date('Y-m-d H:i:s', strtotime($time . ' + ' . $RESET_TOKEN_LIFE));

        $paramValue = array(
            $memberId,
            $token,
            $ip,
            $expireAt,
            1
        );
        $memberId = $this->ds->insert($query, $paramType, $paramValue);
    }

出于某种原因,它不存储 IP 地址,它存储年份......为什么要这样做?是什么原因造成的?

标签: phpmysql

解决方案


尝试更正您发送的参数。第 4 个参数是expireAt,将其更改为IP

$paramValue = array(
            $memberId,
            $token,
            $expireAt,
            $IP,
            1
        );

推荐阅读