sql >> Databáze >  >> RDS >> Mysql

Vložená IP do databáze MySQL se pokaždé změní

Po přečtení komentářů a malém průzkumu jsem našel odpověď a je jednoduchá.

Na 32bitových systémech ip2long() vrátí záporná a kladná celá čísla, ale INET_NTOA() funguje pouze s kladnými celými čísly. Takže máte dvě možnosti, jak to opravit:

  1. Změňte svůj PHP kód:$ip = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR']));
  2. Změňte svůj dotaz SQL:... AND ip = " . ip2long($_SERVER['REMOTE_ADDR']) . " ...

Tuto skutečnost si můžete ověřit takto:

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

Výsledkem je následující výstup:

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

Poté přejděte na 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. Kumulativní součet za dny

  2. Přístup odepřen pro 'user'@'localhost'

  3. Proč postgres nevytváří databázi?

  4. Jak nainstalovat více serverů PostgreSQL na RedHat Linux