2
我試圖設置一個HTML頁面來顯示我的數據庫中的'snp'表。 我已經得到了一切,並很好地運行,但我想在功能添加其中,而不是:如何選擇表列LIKE?的所有列,其中用戶選擇值
my $sql = "SELECT * FROM snp WHERE cid LIKE ? ORDER BY pos LIMIT 10";
我可以做一些事情,允許用戶鍵入任何關鍵詞,它會拉出來,從適當的桌子。我是這樣想的事:
sub get_snp{
my $sql = "SELECT * FROM snp WHERE ? LIKE ? ORDER BY pos LIMIT 10";
$snp_sth = $dbh->prepare($sql);
$snp_sth->execute("$User_Select","%$Search_String%");
更清楚,我的代碼工作,只需$ SEARCH_STRING但在$ User_Select後不加時。 這裏是我的參數:
my $Search_String = param("search_for");
my $User_Select = param("columns");
而且這兩個參數都後來被稱爲在HTML部分如下:
<TR BGCOLOR="#c0c0c0">
<TD><INPUT TYPE="text" NAME="search_for"
STYLE="color:#787878;"
VALUE="enter keyword | select option"
</TD>
<SELECT NAME="columns">
<OPTION SELECTED> --select option--</OPTION>
<OPTION VALUE ="cid"> cid</OPTION>
<OPTION VALUE ="pos"> Position #</OPTION>
<OPTION VALUE ="cdspos"> CDS Position</OPTION>
<OPTION VALUE ="m82base"> M82 base</OPTION>
<OPTION VALUE ="il"> Introgression Line</OPTION>
<OPTION VALUE ="ilbase"> IL base</OPTION>
<OPTION VALUE ="snptype"> SNP Type</OPTION>
<OPTION VALUE ="aachange"> SNP</OPTION>
</SELECT>
<TD><INPUT TYPE="submit" VALUE="Search"></TD>
<TD><INPUT TYPE="reset" VALUE="Reset"></TD>
</TR>
所以上面可以看到我設置了一個droplist用於爲8個不同的選擇8個不同的表格。同樣,如果用戶輸入SL2.40ch12並選擇染色體ID(或cid),那麼我希望顯示該數據,或者如果他們鍵入IL10-1並選擇Introgression Line(或il),那麼應該拉取該數據。
我可能不會以正確的方式解決問題,所以任何建議都會非常有幫助!讓我知道是否需要更多的代碼或一般信息:)
我試圖使$柱=我所有的列南es但警告聲明,「在無效的情況下在./snptable.cgi第18行中無用的常量(column_name)。」並且它什麼也沒做 – byobob
查看DBI方法'quote_identifier'作爲轉義文本以放入SQL字符串的安全方式。這是處理驗證選項的簡單方法;即,您並不需要100%驗證它,但絕對必須100%確定它不是SQL注入攻擊。 –
@StuartWatt - 該驗證僅驗證語法(例如有效字符),而非語義(例如列名稱是DB中的實際有效列)。 – DVK