2017-07-19 31 views
-4

我正嘗試使用Perl Dancer quick_select來快速從數據庫中提取行。我使用的是從我得到了這樣的用戶的項目清單:my @arr=split(/,/, $inline);如何將多個列名傳遞給Perl Dancer的quick_select方法?

我一直使用的項目從用戶,當收到此錯誤:

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

舞者沒有'quick_select'功能。我假設你正在使用一個Dancer插件將它添加到你的程序中。如果你能告訴我們它來自哪裏,這將是有益的。 –

回答

3

顯然[]表示一個列表,但@arr是Perl中的數組?所以我試過把它轉換成列表,但這也行不通。

這是不正確的。 []表示Perl中的數組引用。一個數組是一個按數字索引的標量的有序列表,而一個數組引用是一個「指向」數組的標量。

你可以把你從$input舀起陣列,採取與\@array語法對它的引用,並以這種方式發送:

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

您可以採取的一步(在可能有的通過強制將split調用爲陣列參考內聯:

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

不錯,工作!謝謝!我通常不使用Perl,所有這些符號都可能令人困惑。 –

+2

*「一個數組是一個列表」*不,它不是。數組和列表是[非常不同的事物](https://perldoc.perl.org/perlfaq4.html#What-is-the-difference-between-a-list-and-an-array%3f)。 – Borodin

+0

@Borodin我正在更新,以便在輸入時說「一種列表」。 – stevieb

相關問題