我尝试使用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
能够处理来自用户的动态数据?
答案 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)] });