Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

IP yang dimasukkan ke dalam database MySQL berubah setiap saat

Setelah membaca komentar dan sedikit riset saya menemukan jawabannya dan sederhana.

Pada sistem 32-bit ip2long() mengembalikan bilangan bulat negatif dan positif tetapi INET_NTOA() hanya bekerja dengan bilangan bulat positif. Jadi, Anda memiliki dua opsi untuk memperbaikinya:

  1. Ubah kode PHP Anda:$ip = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR']));
  2. Ubah kueri SQL Anda:... AND ip = " . ip2long($_SERVER['REMOTE_ADDR']) . " ...

Anda dapat memverifikasi fakta ini dengan cara ini:

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

Ini menghasilkan output berikut:

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

Lalu pergi ke 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. Terhubung dengan beberapa database di CakePHP 3

  2. SQLException:Tidak ditemukan driver yang cocok

  3. bagaimana cara memasukkan nilai dengan koma? dalam pernyataan sakelar

  4. Tampilkan subkategori wordpress saja

  5. Jenis Ketidakcocokan:Tidak Dapat Mengonversi dari int ke ResultSet