mysql - 如何使用数组指针从 Perl 中的 MySQL 查询中获取多条记录?
问题描述
我可以将这一切作为一个函数来完成,但是在尝试将其移植到我的函数包(库)中时,我遗漏了一些东西。
这是我想从我的主要 Perl 脚本中做的事情
my @rows;
$result = Funx::dbcdata($myConnection,
"SELECT * FROM Inv where name like \"%DOG%\";", \@rows);
然后在我的库包中我正在尝试这个
sub dbcdata
{
my ($connection, $command, $array) = @_;
my $query = $connection->prepare($command);
my $result = $query->execute();
my $i =0;
while(my $row = $query->fetchrow_arrayref() )
{
@{$array}[$i] = $row;
$i++;
}
$query->finish;
return $result;
}
我希望找回对每一行的指针或引用(在这种情况下是 4),但不是。@rows 中的每个元素都是相同的:
阵列(0x5577a0f77ec0)阵列(0x5577a0f77ec0)阵列(0x5577a0f77ec0)阵列(0x5577a0f77ec0)
我也不知道如何将每一个变成原来的单独行。任何帮助将不胜感激,谢谢。
解决方案
从文档中fetchrow_arrayref
:
请注意,每次提取都会返回相同的数组引用,因此不要存储引用并在以后的提取后使用它。此外,数组的元素也会被每一行重用,所以如果你想引用一个元素,请小心。
听起来你想要fetchall_arrayref:
fetchall_arrayref 方法可用于从准备和执行的语句句柄中获取要返回的所有数据。它返回对包含每行一个引用的数组的引用。
执行语句后,您可以执行以下操作
@{$array} = $query->fetchall_arrayref->@*;
而不是那个丑陋的循环。
但selectall_array可能会更好。您的整个函数可以通过调用它来替换:
my @rows =
$myConnection->selectall_array(q/SELECT * FROM Inv WHERE name LIKE '%DOG%'/);
推荐阅读
- c# - 从数据表中填充行后,将行添加到 WinForms 组合框
- google-optimize - Google Optimize AB 测试如何工作?
- ubuntu - 无法记录 Kubernetes pod。没有到主机的路由
- ios - 成功完成 API 调用 SWIFT 后不显示警报视图控制器
- javascript - 谷歌图表:Y 轴数字不可见
- linux - 在 JSON 文件上制作树命令打印 & 而不是 & (和其他特殊字符)
- angular - 如何启用 Angular PWA 服务工作者?
- botframework - OnTeamsTaskModuleFetchAsync 签名在 4.6 和 4.7.2 之间更改
- flutter - 有状态的小部件,标记为 @immutable 的类
- html - 使 flex-wrap 忽略某些元素