我想知道是否有人可以通过旧的Perl代码帮助我解决令人沮丧的问题。我的实际任务是将旧的perl脚本从5.10.1版本迁移到5.18.2。
所以我已经用脚本完成了简单的问题,例如错误的调用,格式错误等。
但是我停留在一个名为fetchhash的函数上,似乎就像fetchrow_hashref;一样。
我打算捕获IP,名称服务器ID和名称的列表。我的问题是,函数fetchrow_hashref不会像旧代码中的fetchhash一样执行相同的操作。
请参阅以下新代码:
#fetch_network();
$res2=$dbh->prepare("select nsip,nsid,nsname from nameservers");
$res2->execute();
while (%ns2=$res2->fetchrow_hashref;{
$nsips{$ns2{nsid}}=$ns2{nsip};
$nsnames{$ns2{nsid}}=$ns2{nsname};
}
该表如下所示:
+-----------------+------+------------------------------+
| nsip | nsid | nsname |
+-----------------+------+------------------------------+
| 101.101.111.10 | 1 | ns1.yournameserver.net |
这是旧代码的一部分:
$res2=$dbh->query("select nsip,nsid,nsname from nameservers");
while (%ns2=$res2->fetchhash)
{
$nsips{$ns2{nsid}}=$ns2{nsip};
$nsnames{$ns2{nsid}}=$ns2{nsname};
}
所以我尝试了fetchrow_hashref,但对我没有用:
main::(nsconfgen.pl:170): while (%ns2=$res2->fetchrow_hashref){
DB<193> n
Reference found where even-sized list expected at nsconfgen.pl line 170.
at nsconfgen.pl line 170.
main::(nsconfgen.pl:171): $nsips{$ns2{nsid}}=$ns2{nsip};
DB<193> p $ns2{nsid}
( i've get no value from the hash )
当然,我已经爬过Google了,我尝试了很多例子,但没有任何帮助。
所以我希望我能在这里得到一些帮助。
非常感谢你!
最佳答案
在DBI
实现者中,fetchrow_hashref
的返回值是对哈希的引用,而不是哈希。对代码进行一些更改将使其正确:
while ($ns2=$res2->fetchrow_hashref) {
$nsips{$ns2->{nsid}}=$ns2->{nsip};
$nsnames{$ns2->{nsid}}=$ns2->{nsname};
}
关于mysql - fetchrow_hashref还是fetchhash?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36358911/