0

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

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

现在,如何存储$binary_start和表?我是否需要任何数据包装(例如 bin2hex)?$binary_endip

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

1 回答 1

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 );
于 2013-11-05T10:37:09.663 回答