gpt4 book ai didi

MySQL inet_aton() 偶尔返回 null

转载 作者:行者123 更新时间:2023-11-29 00:37:23 24 4
gpt4 key购买 nike

我正在向日志表中插入数据,包括 IP 地址。由于某种原因,IP 列有时为 NULL。在大多数情况下(所有记录的 99.9%)IP 被正确记录。

IP 使用 inet_aton() 函数存储在一个无符号 INT 列中。这会将 IP 地址从点分隔的书面形式 (zzz.xxx.yyy.www) 转换为数字形式。

MySQL 文档说明了以下有关 INET_ATON() 和 NULL 的内容:

INET_ATON() returns NULL if it does not understand its argument.

INET_ATON() may or may not return a non-NULL result for short-form IP addresses (such as '127.1' as a representation of '127.0.0.1').

我一直在记录流入查询的数据,并已验证绑定(bind)的参数确实包含 IP 地址而不是空值。它们的 IP 地址看起来不错,如果我手动运行一个

SELECT INET_ATON('zzz.yyy.xxx.www');

结果是一个数字表示,正如预期的那样。

为了完整起见,代码(注意:删除了看似不相关的列):

/* @var $conn PDO */
$stmt = $conn->prepare(
'INSERT INTO subscription_log(
email, groupid, subscribe_ip
) VALUES (
:email,
:groupid,
inet_aton(:label_subscribe_ip),
)');
$result = $stmt->execute($params);

// With the following input for $params (print_r):
Array
(
[email] => user@domain.com
[groupid] => 51299
[label_subscribe_ip] => 145.222.138.151
)

最后,尽管我怀疑它是否相关,MySQL 版本信息:

version = 5.5.27-28.1
version_comment = Percona Server (GPL), Release 28.1
version_compile_machine = x86_64
version_compile_os = Linux

对我来说,这很神秘。有人对如何进一步调试它有什么建议吗?

最佳答案

您可能在输入中添加了空格(或不可打印的字符)。

假设您在此处发布文字输出:

Array
(
[email] => user@domain.com
[groupid] => 51299
[label_subscribe_ip] => 145.222.138.151
)

145. 前有两个空格,这意味着实际输入是 _145.222.138.151(开头有一个空格)。

尝试使用 trim()在将 ip 添加到参数列表之前。

关于MySQL inet_aton() 偶尔返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13682058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com