Mysql
 sql >> Base de données >  >> RDS >> Mysql

L'adresse IP insérée dans la base de données MySQL change à chaque fois

Après avoir lu les commentaires et un peu de recherche, j'ai trouvé la réponse et c'est simple.

Sur les systèmes 32 bits ip2long() renvoie des entiers négatifs et positifs mais INET_NTOA() ne fonctionne qu'avec des entiers positifs. Vous avez donc deux options pour résoudre ce problème :

  1. Modifiez votre code PHP :$ip = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR']));
  2. Modifiez votre requête SQL :... AND ip = " . ip2long($_SERVER['REMOTE_ADDR']) . " ...

Vous pouvez vérifier ce fait de cette façon :

$ip  = $_SERVER['REMOTE_ADDR'];
$int = ip2long($ip);    
var_dump($ip, $int, sprintf('%u', $int));

Cela produit la sortie suivante :

string '192.168.1.120' (length=13)
int -1062731400
string '3232235896' (length=10)

Allez ensuite dans 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)