sql >> Database >  >> RDS >> Mysql

Ingevoegd IP-adres in MySQL-database verandert elke keer

Na het lezen van de opmerkingen en een beetje onderzoek vond ik het antwoord en het is eenvoudig.

Op 32-bits systemen ip2long() geeft negatieve en positieve gehele getallen terug, maar INET_NTOA() werkt alleen met positieve gehele getallen. Je hebt dus twee opties om dat op te lossen:

  1. Wijzig uw PHP-code:$ip = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR']));
  2. Wijzig uw SQL-query:... AND ip = " . ip2long($_SERVER['REMOTE_ADDR']) . " ...

U kunt dit feit op deze manier verifiëren:

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

Dit levert de volgende uitvoer op:

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

Ga dan naar 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. Hoe TIME_FORMAT() werkt in MariaDB

  2. Hoe GOTO te gebruiken in SQL Server

  3. MySQL:retourneer max van de laatste 5 cijfers uit kolom

  4. Hoe een queryfout in PDO PHP te bekijken