【问题标题】:store IPv6 to database after being converted to binary将 IPv6 转换为二进制后存储到数据库
【发布时间】:2013-11-05 10:20:56
【问题描述】:

我有一个带有VARBINARY 字段的ip 表:ip_startip_end 现在我有一个问题,

$ip=('2001:255:ffff:ffff:ffff:ffff:ffff:ffff');
$binary=unpack("A16",inet_pton($ip));
var_dump($binary);

现在,如何将$binary_start$binary_end 存储到ip 表中? 我是否需要任何数据包装(例如 bin2hex)?

"INSERT INTO `ip_table` (`id`, `binary_start`, `binary_end`) VALUES
(1,".$binary_start.",".$binary_end.");"

【问题讨论】:

  • How can I prevent SQL injection in PHP? 的可能重复项。尽管有标题,但这正是您面临的问题,并且列出的解决方案将解决它。
  • @CBroe - 他已经提到了varbinary

标签: php mysql binary ipv6


【解决方案1】:

MySQL 有一个BINARY/VARBINARY 类型,可用于直接存储二进制数据,无需计算成十六进制表示。

CREATE TABLE `%s` (
    `binary_start` BINARY( 20 ) NOT NULL,
    `binary_end` VARBINARY( 20 ) NOT NULL,
);

如果您使用准备好的语句并传递值而不将它们连接到字符串,则二进制数据将“按原样”插入。

/** @var $database \PDO */
$stmt = $database->prepare( 'INSERT INTO `ip_table` (`binary_start`, `binary_end`) VALUES ( :start, :end );' );
$stmt->bindValue( ':start', $binaryStart );
$stmt->bindValue( ':end', $binaryEnd );

【讨论】:

    猜你喜欢
    • 2010-11-10
    • 2023-03-25
    • 2011-03-27
    • 2022-01-22
    • 1970-01-01
    • 2020-03-22
    • 2018-12-24
    • 2015-09-22
    相关资源
    最近更新 更多