Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MYSQL-选择IP v4/v6、inet\u pton&;bin2hex_Php_Mysql_Select_Hex_Ip - Fatal编程技术网

Php MYSQL-选择IP v4/v6、inet\u pton&;bin2hex

Php MYSQL-选择IP v4/v6、inet\u pton&;bin2hex,php,mysql,select,hex,ip,Php,Mysql,Select,Hex,Ip,我在从mysql sql server中选择正确的值时遇到了一些问题 ip可以是ipv6和v4 表:用户{ ip二进制(16) } 如何获得与*00000*的可行匹配 如果输入是ipv6匹配,则可以,但ip v4不可以。更新: MySQL 5.6.3及更高版本支持IPv6地址-请参阅以下内容:“INET6_ATON(expr)” 数据类型是VARBINARY(16),而不是前面的评论所建议的BINARY(16)。唯一的原因是MySQL函数同时适用于IPv6和IPv4地址BINARY(16)可以

我在从mysql sql server中选择正确的值时遇到了一些问题

ip可以是ipv6和v4

表:用户{

ip二进制(16)

}

如何获得与*00000*的可行匹配


如果输入是ipv6匹配,则可以,但ip v4不可以。

更新:

MySQL 5.6.3及更高版本支持IPv6地址-请参阅以下内容:“INET6_ATON(expr)”


数据类型是
VARBINARY(16)
,而不是前面的评论所建议的
BINARY(16)
。唯一的原因是MySQL函数同时适用于IPv6和IPv4地址
BINARY(16)
可以只存储IPv6地址并保存一个字节
VARBINARY(16)
在处理IPv6和IPv4地址时应使用。

您可以使用
VARBINARY
而不仅仅是
BINARY

从MySQL手册:

如果检索到的值必须与为指定的值相同 没有填充的存储,最好使用VARBINARY或 而不是BLOB数据类型之一


尝试更改为
ip VARBINARY(16)
?如果将变量存储为十六进制数,请将列更改为数字
HEX()
将用于数字输入。@drew010我使用了您的解决方案,效果非常好。不幸的是,ipv6不适用于ipv6如果您想在同一字段中处理ipv4和ipv6,并且如果您使用的是Mysql 5.6或更高版本,则可以使用varbinary(16)和函数inet6_aton和inet6_ntoa。这是一个更好的例子,说明了为什么应该使用MySQL函数
$ip = '192.168.10.115';
$ip = bin2hex(inet_pton($ip)); // Returns c0a80a73
$result = $this->db->select("SELECT * FROM User WHERE HEX(ip) = $ip");
// $result empty because in db its stored as:
// HEX(ip) = C0A80A73000000000000000000000000