gpt4 book ai didi

mysql - 找不到我的错误

转载 作者:行者123 更新时间:2023-11-29 06:24:31 26 4
gpt4 key购买 nike

您好,这是我正在处理的一个非常大的 perl 程序的一个小片段,但我认为错误出在这部分。

my $headd = "test,test1,test2,test3,ect";
my @headers = split(',', $headd);

CONNECT TO DATABASE STUFF THAT WORKS FINE

my %column_mapping = (
"GPS ALT" => 'GPS_ALT',
"GPS DTS" => 'GPS_DTS',
"GPS FIX" => 'GPS_FIX',
"GPS HDG" => 'GPS_HDG'
)

my $sql = sprintf 'INSERT INTO tablename ( %s ) VALUES ( %s )',
join( ',', map { $column_mapping{$_} } @$headers ),
join( ',', ('?') x scalar @$headers ); # note the list around the '?'

由于我是 perl 的新手,如果非要我猜的话,我会说它就在这里

    join( ',', map { $column_mapping{$_} } @$headers ),
join( ',', ('?') x scalar @$headers );

我认为我的 header 或其他数据类型有误,但我不完全确定问题出在哪里,它只是在这些行附近崩溃。

如果你碰巧看到我做错了什么,那就太好了:)

最佳答案

您的主要错误是没有在您的 Perl 代码顶部添加 use strictuse warnings。这些行会发现许多经常潜入 Perl 程序的问题。他们会发现这个问题。

问题是您声明了一个名为@headers 的数组。

my @headers = split(',', $headd);

但下次您尝试使用它时,您假设它是一个名为 $headers 的数组reference

join( ',', map { $column_mapping{$_} } @$headers )

在Perl中,$headers@headers是两个完全不同的变量,它们之间没有任何联系。因为您从未给 $headers 一个值,所以尝试取消引用它 (@$headers) 永远不会顺利。

但是您已经从评论中得出结论。您已完成建议的修复(将 @$headers 替换为 @headers),但现在出现了不同的错误:

the problem is saying I have an initialized value in the join

我假设你的意思是“未初始化”:-)

听起来问题出在我们上面讨论的同一行(现在使用固定语法):

join( ',', map { $column_mapping{$_} } @headers )

那么这里发生了什么?好吧,我们正在有效地将值(value)观转化为新的值(value)观。对于 @headers 中的每个值,我们在 %column_mappings 中查找它并从散列中返回关联值。

这怎么可能给我们一个未定义的值?那么,如果我们在散列中查找实际上并不存在的键,会发生什么情况? Perl 给了我们特殊值“undef”。这会触发您收到的警告。

所以我对你的建议是,你仔细检查你在 @headers 中获得的值(这将是来自 $head 的值)并确保所有这些可能的值在 %column_mappings 中都有一个关联键。

一种解决方法是在 map 中设置默认值。也许是这样的:

join( ',', map { $column_mapping{$_} // 'MISSING MAPPING' } @$headers )

这几乎肯定会在未来的某个时候破坏您的数据库交互 - 但至少问题是什么是显而易见的!

更新:在问题值进入@headers之前消除它们:

my @headers = grep { exists $column_mapping{$_} } split(',', $headd);

您需要将此语句移到 %column_mappings 的定义之后(希望原因很明显)。

关于mysql - 找不到我的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31835828/

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