Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O IP inserido no banco de dados MySQL muda a cada vez


Depois de ler os comentários e pesquisar um pouco, encontrei a resposta e é simples.

Em sistemas de 32 bits ip2long() retorna inteiros negativos e positivos, mas INET_NTOA() só funciona com inteiros positivos. Então você tem duas opções para corrigir isso:
  1. Altere seu código PHP:$ip = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR']));
  2. Altere sua consulta SQL:... AND ip = " . ip2long($_SERVER['REMOTE_ADDR']) . " ...

Você pode verificar este fato desta forma:
$ip  = $_SERVER['REMOTE_ADDR'];
$int = ip2long($ip);    
var_dump($ip, $int, sprintf('%u', $int));

Isso produz a seguinte saída:
string '192.168.1.120' (length=13)
int -1062731400
string '3232235896' (length=10)

Então vá para o MySQL:
mysql> SELECT '192.168.1.120', INET_NTOA(-1062731400), INET_NTOA(3232235896)
+---------------+------------------------+-----------------------+
| 192.168.1.120 | INET_NTOA(-1062731400) | INET_NTOA(3232235896) |
+---------------+------------------------+-----------------------+
| 192.168.1.120 | NULL                   | 192.168.1.120         |
+---------------+------------------------+-----------------------+
1 row in set (0.00 sec)