precisionttl gần hơn, thay vì nhị phân (16), hãy sử dụng varbinary (16) làm user196009 đã trả lời trong một câu hỏi liên quan. Nó làm việc cho tôi. Làm thế nào?
Lưu trữ IP:
<?php
$query = "insert into stats(vis_ip, id_stat) values('" . inet_pton('66.102.7.104') . "', '1')"; // google's IP address
// using a PDO wrapper. http://www.phpclasses.org/package/5206-PHP-Execute-database-queries-from-parameters-using-PDO.html
include_once 'db.php';
$c = new DB();
$visit = $c->getResults($query); // stored as binary
?>
Truy xuất IP:
<?php
$query = "SELECT `vis_ip` FROM `stats` WHERE `id_stat`=1";
// PDO wrapper
include_once 'db.php';
$c = new DB();
$stats = $c->getRow($query);
echo inet_ntop($stats->vis_ip); // outputs 66.102.7.104
?>
Nó sẽ hoạt động với địa chỉ IPv6 (tôi có kết nối IPv4). Tôi không phải là chuyên gia nên tôi chưa biết độ dài varbinary có đúng không, nhưng tôi đã nói như thế nào, nó hoạt động với tôi.
Để kiểm tra xem 'Hỗ trợ IPv6' có được bật trong phiên bản / máy chủ PHP của bạn hay không:
<?php
phpinfo(INFO_GENERAL); // http://php.net/manual/es/function.phpinfo.php
?>