Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

IP được chèn vào cơ sở dữ liệu MySQL thay đổi mỗi lần

Sau khi đọc các bình luận và nghiên cứu một chút, tôi đã tìm ra câu trả lời và nó rất đơn giản.

Trên hệ thống 32-bit ip2long() trả về số nguyên âm và số nguyên dương nhưng INET_NTOA() chỉ hoạt động với số nguyên dương. Vì vậy, bạn có hai tùy chọn để khắc phục điều đó:

  1. Thay đổi mã PHP của bạn:$ip = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR']));
  2. Thay đổi truy vấn SQL của bạn:... AND ip = " . ip2long($_SERVER['REMOTE_ADDR']) . " ...

Bạn có thể xác minh sự thật này theo cách này:

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

Điều này tạo ra kết quả sau:

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

Sau đó, truy cập 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. ký hiệu @ trong thủ tục được lưu trữ?

  2. Mất độ chính xác trong khi chèn double vào MySQL thông qua PDO

  3. sql jdbc getgeneratedkeys trả về không tìm thấy id cột, loại cột không xác định

  4. Triển khai Cơ sở dữ liệu MySQL Cloud Hybrid bằng ClusterControl

  5. Làm cách nào để thêm tổng số làm hàng cuối cùng trong sql của tôi?