Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wstawiony adres IP do bazy danych MySQL zmienia się za każdym razem

Po przeczytaniu komentarzy i małych poszukiwaniach znalazłem odpowiedź i jest ona prosta.

W systemach 32-bitowych ip2long() zwraca ujemne i dodatnie liczby całkowite, ale INET_NTOA() działa tylko z liczbami całkowitymi dodatnimi. Masz więc dwie opcje, aby to naprawić:

  1. Zmień swój kod PHP:$ip = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR']));
  2. Zmień zapytanie SQL:... AND ip = " . ip2long($_SERVER['REMOTE_ADDR']) . " ...

Możesz zweryfikować ten fakt w ten sposób:

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

Daje to następujące dane wyjściowe:

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

Następnie przejdź do 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Poznaj MySQL – Tydzień Nowych Technologii

  2. wybierz z tabeli mysql rekordy należące do dzisiaj

  3. PDOException SQLSTATE[HY000] [2002] Przekroczono limit czasu połączenia na moim lokalnym komputerze

  4. Wywołanie procedury składowanej , gdy nazwa procedury w zmiennej w mysql

  5. Upuść czas w DateTime