e-6ren">
gpt4 book ai didi

database - 如何将数据复制到 perl 中的数组?

转载 作者:搜寻专家 更新时间:2023-10-30 21:40:37 25 4
gpt4 key购买 nike

我正在尝试访问数据库中的数据并将数据复制到一个数组中。这是我的代码,

$sth = $dbh->prepare("SELECT * FROM abcd WHERE id=100 "); 
$sth->execute;
$N=$sth->rows;
print "$N\n";
while (my @row_val = $sth->fetchrow_array()){
my ($uniqid, $time, $current, $id ) = @row_val;
$y[k]=$current;
$k++;
}
for ($k=0;$k<$N;$k++) {
print "$y[k]\t";
}

但它对所有 $y[k] 显示相同的值。 perl 如何将数据库中的数据复制到数组中?

最佳答案

你在这里使用的是裸词:

$y[k]=$current;
# ^--- here, the "k" is a bareword

如果您使用警告,这将给出警告

Unquoted string "k" may clash with future reserved word at foo.pl line 10.
Argument "k" isn't numeric in array element at foo.pl line 10.

“k”将被解释为一个字符串,将被转换为一个数字,该数字将为零 0,因此您的所有数据都存储在 $y[0] 中

这就是为什么不打开警告是一个非常糟糕的主意。

您可能想要的是将新值推送到数组中:

push @y, $current;

在我看来,这比使用索引更可取,因为它可以为您完成所有工作。通常,如果索引本身对您有值(value),例如比较数组元素时,您只想专门参与数组索引。

这也意味着你后续的for循环

for ($k=0;$k<$N;$k++) {
print "$y[k]\t";
}

写得更好

for (@y) {
print "$_\t";
}

虽然用 join 写的更好:

print join "\t", @y;

最后一点,你应该总是使用

use strict;
use warnings;

在使用这些 pragma 时需要少量的学习来克服额外的噪音,但就学习和减少调试时间而言,这是非常值得的。我通常说,不使用这些编译指示就像掩盖汽车中的低油警告灯:不知道错误并不能解决它们。

关于database - 如何将数据复制到 perl 中的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19269019/

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