如何将多列名称传递给Perl Dancer的quick_select方法?

时间:2017-07-19 17:27:50

标签: perl dancer

我尝试使用Perl Dancer quick_select快速从数据库中获取行。我使用了用户的项目列表:my @arr=split(/,/, $inline);

使用用户的项目时,我一直收到此错误:

  

DBD::mysql::db selectall_arrayref failed: Unknown column 'val2' in 'where clause'

这不起作用:

my @rows = $connect->quick_select('table', { column => @arr});

但这确实有效:

my @rows = $connect->quick_select('table', { column => ['val1', 'val2']});`

显然[]表示列表,但@arr是Perl中的数组?所以我尝试将其转换为列表,但这也不起作用:

my @rows = $connect->quick_select('table', { column => @arr[0..$#arr]});

已更改表名和列名以保护数据。如何解决此问题,以便quick_select能够处理来自用户的动态数据?

1 个答案:

答案 0 :(得分:3)

  

显然[]表示列表,但@arr是Perl中的数组?所以我尝试将其转换为列表,但这也无效。

这不正确。 []表示Perl中的数组引用。数组是按数字索引的标量的有序列表,数组引用是"指向"的标量。一个数组。

您可以从$input获取您获取的数组,使用\@array语法对其进行引用,然后以这种方式发送:

my @rows = $connect->quick_select('table', { column => \@arr});

通过强制调用split内联数组引用,您可以更进一步(可能需要花费一些费用来清晰):

my @rows = $connect->quick_select('table', { column => [split(/,/, $inline)] });