【问题标题】:Inserting IPv6 into database with codeigniter使用 codeigniter 将 IPv6 插入数据库
【发布时间】:2013-01-09 03:49:24
【问题描述】:

我在mysql数据库中的ip字段是VARBINARY(16)

  // Insert into website table
    $ip = inet_pton('::1'); // Local ip
    $data_rec = array(
            'ip_address' => $ip,
            );  
    $this->db->insert('visitors', $data_rec); 

ip 没有被插入。这是一个空白字段。这是为什么呢?

【问题讨论】:

  • 我们不知道您的insert() 函数是如何工作的。它真的接受数组吗?
  • IPv6 不是超过 20 个字符甚至更长吗?
  • @Micheal Berkowski,好像他正在使用标准的 codeigniter 插入函数,所以他们应该接受数组。
  • @Jeemusu 我没有看到codeigniter标签

标签: php mysql codeigniter ipv6


【解决方案1】:

inet_pton() 返回不可打印的字符。
您是否尝试从数据库中读取并执行echo inet_topn()

鉴于我有一张桌子

CREATE TABLE `ip` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `ip` varbinary(16) DEFAULT NULL,
  PRIMARY KEY (`id`)
)

并使用这个简单的脚本(为简单起见,有意省略所有检查)

<?php
$in6_addr = inet_pton('::1');

$db = new mysqli('localhost', '******', '******', 'test');

$qry = "INSERT INTO ip (ip) VALUES('$in6_addr')";
$db->query($qry));

$qry = "SELECT * FROM ip WHERE id=1";
$result = $db->query($qry);
if ($row = $result->fetch_array(MYSQL_ASSOC)) {
    echo inet_ntop($row['ip']);
}    
?>

你得到输出

::1

但是在 phpAdmin 或 Sequel Pro 中看不到值

【讨论】:

  • 我实际上正在使用 Sequal Pro.. 如果您看不到它,那真的很糟糕.. 这是什么原因?那么有没有办法让我看到它或以其他方式存储它?我需要能够在 sequel pro 中看到它。
  • 是的,我确实得到了 ::1 输出。虽然我在 sequal pro 中看不到它,但很糟糕。有什么解决方法
  • 嗯,原因可能是要以紧凑的形式存储它。这正是inet_pton() 为您所做的。您将如何存储它取决于您将如何处理它,而不是在 SequelPro 或其他 IDE 中查看它。其他选项有:2XBIGINTs、VARCHAR(39) 或 VARCHAR(45) 取决于您是否需要支持 IPv4 隧道。你可以阅读thisthis做出正确的决定
  • 我想我会使用 VARCHAR(50)。谢谢
猜你喜欢
  • 2013-04-04
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多