Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Die in die MySQL-Datenbank eingefügte IP ändert sich jedes Mal

Nachdem ich die Kommentare gelesen und ein wenig recherchiert hatte, fand ich die Antwort und sie ist einfach.

Auf 32-Bit-Systemen ip2long() gibt negative und positive Ganzzahlen zurück, aber INET_NTOA() funktioniert nur mit positiven ganzen Zahlen. Sie haben also zwei Möglichkeiten, das zu beheben:

  1. Ändern Sie Ihren PHP-Code:$ip = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR']));
  2. Ändern Sie Ihre SQL-Abfrage:... AND ip = " . ip2long($_SERVER['REMOTE_ADDR']) . " ...

Sie können diese Tatsache folgendermaßen überprüfen:

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

Dies erzeugt die folgende Ausgabe:

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

Gehen Sie dann zu 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)