sql >> Database teknologi >  >> RDS >> Mysql

Indsat IP i MySQL-databasen ændres hver gang

Efter at have læst kommentarerne og lidt research fandt jeg svaret, og det er enkelt.

På 32-bit systemer ip2long() returnerer negative og positive heltal men INET_NTOA() virker kun med positive heltal. Så du har to muligheder for at rette det:

  1. Skift din PHP-kode:$ip = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR']));
  2. Skift din SQL-forespørgsel:... AND ip = " . ip2long($_SERVER['REMOTE_ADDR']) . " ...

Du kan bekræfte dette faktum på denne måde:

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

Dette producerer følgende output:

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

Gå derefter til 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)



  1. Byg dynamisk WHERE-klausul i mySQL

  2. Sådan undgår du denne PDO-undtagelse:Kan ikke udføre forespørgsler, mens andre ubuffrede forespørgsler er aktive

  3. Postgresql regex for at matche store bogstaver, Unicode-bevidst

  4. Kan vi bruge PHP-funktionen strtotime i Mysql Query