mysql - fetchrow_hashref 还是 fetchhash?

标签 mysql perl dbi

我想知道是否有人可以帮助我解决旧 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/

相关文章:

php - Eloquent 查询获取分组相关模型的计数

php - mysql文件上传链接

perl - 有条件地连接到数据库

mysql - 无法找出 perl DBI 中的占位符

perl - LWP::UserAgent 第 2 部分上的 500 错误

Perl - DBI 和 .pgpass

php - SQL SELECT 到多个表

mysql - 如何在 MySQL 查询中获取给定月份的第 N 个工作日的日期?

linux - 在 perl 中停止具有条件的进程

mysql - 如果多个客户端在 MySQL 中选择,如何避免竞争条件?