sql >> Databasteknik >  >> RDS >> Mysql

Infogad IP i MySQL-databasen ändras varje gång

Efter att ha läst kommentarerna och lite research hittade jag svaret och det är enkelt.

På 32-bitars system ip2long() returnerar negativa och positiva heltal men INET_NTOA() fungerar bara med positiva heltal. Så du har två alternativ för att fixa det:

  1. Ändra din PHP-kod:$ip = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR']));
  2. Ändra din SQL-fråga:... AND ip = " . ip2long($_SERVER['REMOTE_ADDR']) . " ...

Du kan verifiera detta så här:

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

Detta ger följande utdata:

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

Gå sedan till 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. Kolumnaliaset känns inte igen i WHERE-satsen

  2. Performance Myths:Truncate Cant Be Rolled Back

  3. Hur man lägger till och ändrar XML-taggar i PHP

  4. Så här fixar du MySql:indexkolumnstorleken är för stor (Laravel migrera)