从 perl 插入 mysql 时的 dup 条目
Posted
技术标签:
【中文标题】从 perl 插入 mysql 时的 dup 条目【英文标题】:dup entry when doing insert into mysql from perl 【发布时间】:2011-05-23 01:25:23 【问题描述】:我正在从 perl 插入 mysql 数据库。第一次插入后出现重复错误。这是我用于插入的代码。我正在从 json 响应中提取一个 id。我在代码下方输出了我收到的内容
foreach my $listing(@$json_text->listings)
my $id = $listing->id;
print "\nid = $id \n";
# DO THE INSERT
my $query_insert = "INSERT INTO calendar (id) VALUES ($id)";
print "query insert = $query_insert \n";
my $query = $db->do($query_insert);
print "query = $query \n";
#end foreach
这是我收到的输出。 (返回没有正确复制。所以下面看起来不对,但正确的数据在那里)。这就像 133 我的 $query = $db->do($query_insert);
id = 2576246314 查询插入 = INSERT INTO 日历 (id) 值 (2576246314) 查询 = 1
id = 2576246678 查询插入 = INSERT INTO 日历 (id) 值 (2576246678) DBD::mysql::db 失败:./calendar_run.pl 第 133 行的键 'PRIMARY' 的重复条目 '2147483647'。 查询 =
id = 2576246781 查询插入 = INSERT INTO 日历 (id) 值 (2576246781) DBD::mysql::db 失败:./calendar_run.pl 第 133 行的键 'PRIMARY' 的重复条目 '2147483647'。 查询 =
id = 2576247610 查询插入 = INSERT INTO 日历 (id) 值 (2576247610) DBD::mysql::db 失败:./calendar_run.pl 第 133 行的键 'PRIMARY' 的重复条目 '2147483647'。 查询 =
id = 2576247737 查询插入 = INSERT INTO 日历 (id) 值 (2576247737) DBD::mysql::db 失败:./calendar_run.pl 第 133 行的键 'PRIMARY' 的重复条目 '2147483647'。 查询 =
id = 2576247756 查询插入 = INSERT INTO 日历 (id) 值 (2576247756) DBD::mysql::db 失败:./calendar_run.pl 第 133 行的键 'PRIMARY' 的重复条目 '2147483647'。 查询 =
id = 2576247766 查询插入 = INSERT INTO 日历 (id) 值 (2576247766) DBD::mysql::db 失败:./calendar_run.pl 第 133 行的键 'PRIMARY' 的重复条目 '2147483647'。 查询 =
id = 2576248369 查询插入 = INSERT INTO 日历 (id) 值 (2576248369) DBD::mysql::db 失败:./calendar_run.pl 第 133 行的键 'PRIMARY' 的重复条目 '2147483647'。 查询 =
id = 2576248388 查询插入 = INSERT INTO 日历 (id) 值 (2576248388) DBD::mysql::db 失败:./calendar_run.pl 第 133 行的键 'PRIMARY' 的重复条目 '2147483647'。 查询 =
id = 2576248660 查询插入 = INSERT INTO 日历 (id) 值 (2576248660) DBD::mysql::db 失败:./calendar_run.pl 第 133 行的键 'PRIMARY' 的重复条目 '2147483647'。 查询 =
id = 2576249706 查询插入 = INSERT INTO 日历 (id) 值 (2576249706) DBD::mysql::db 失败:./calendar_run.pl 第 133 行的键 'PRIMARY' 的重复条目 '2147483647'。 查询 =
id = 2576250254 查询插入 = INSERT INTO 日历 (id) 值 (2576250254) DBD::mysql::db 失败:./calendar_run.pl 第 133 行的键 'PRIMARY' 的重复条目 '2147483647'。 查询 =
【问题讨论】:
我们需要看看日历的表结构是什么样子的 请在您的代码中使用 DBI 占位符。现在任何人都可以通过在你的 JSON 中加入有趣的东西来 pwn 你的数据库。 search.cpan.org/~timb/DBI-1.616/… 【参考方案1】:听起来 id 的类型太短了。该值 (2147683647) 是最大的有符号 32 位整数值。尝试为 id 使用更大的尺寸。
【讨论】:
【参考方案2】:我在使用 DBD::MySQL 时遇到了同样的错误。这是我发现的:“Perl 将返回的值存储为字符串,但是当您在数字上下文中使用这些值时会自动将它们转换为数字。这将导致它们被“截断”为 2147483647,因为 Perl 使用有符号的 LONG 值来存储这些数字。” (这里:http://www.tol.it/doc/MySQL/chapter7.html)。 但我还没有发现任何公开的错误。
【讨论】:
以上是关于从 perl 插入 mysql 时的 dup 条目的主要内容,如果未能解决你的问题,请参考以下文章
如何处理错误:ER_DUP_ENTRY:nodejs 中的重复条目