我正在尝试设置一个HTML pg来显示我的数据库中的'snp'表。 我已经把所有东西都运行得很好,但是我想添加一个功能,而不是:
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>
上面你可以看到我为8个不同的表设置了8个不同选项的下拉列表。再次,如果用户输入SL2.40ch12并选择染色体ID(或cid),那么我希望显示数据,或者如果他们输入IL10-1并选择Introgression Line(或il),那么应该提取该数据。
我可能不会以正确的方式解决这个问题,所以任何建议都会非常有用!如果需要更多代码或一般信息,请告诉我们:)
答案 0 :(得分:3)
绑定参数(?
doohikey)仅适用于参数值,而不适用于表名或列名。
如果要将变量用于表名或列名,则:
使用常规插值将其插入到SQL字符串中:
my $sql = qq[SELECT * FROM snp WHERE $my_col LIKE ? ORDER BY pos LIMIT 10];