टिप्पणियों और थोड़ा शोध पढ़ने के बाद मुझे इसका उत्तर मिला और यह आसान है।
32-बिट सिस्टम पर ip2long()
ऋणात्मक और धनात्मक पूर्णांक देता है लेकिन INET_NTOA()
केवल सकारात्मक पूर्णांक के साथ काम करता है। तो इसे ठीक करने के लिए आपके पास दो विकल्प हैं:
- अपना PHP कोड बदलें:
$ip = sprintf('%u', ip2long($_SERVER['REMOTE_ADDR']));
- अपनी SQL क्वेरी बदलें:
... AND ip = " . ip2long($_SERVER['REMOTE_ADDR']) . " ...
आप इस तथ्य को इस प्रकार सत्यापित कर सकते हैं:
$ip = $_SERVER['REMOTE_ADDR'];
$int = ip2long($ip);
var_dump($ip, $int, sprintf('%u', $int));
यह निम्न आउटपुट उत्पन्न करता है:
string '192.168.1.120' (length=13)
int -1062731400
string '3232235896' (length=10)
फिर 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)