如何从表LIKE?中选择所有列,其中user用户选择值

时间:2013-07-25 14:10:11

标签: mysql perl cgi parameter-passing

我正在尝试设置一个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),那么应该提取该数据。

我可能不会以正确的方式解决这个问题,所以任何建议都会非常有用!如果需要更多代码或一般信息,请告诉我们:)

1 个答案:

答案 0 :(得分:3)

绑定参数(? doohikey)仅适用于参数值,而不适用于表名或列名。

如果要将变量用于表名或列名,则:

  • 验证(确保它是数据库中的有效表格或有效列)
  • 使用常规插值将其插入到SQL字符串中:

    my $sql = qq[SELECT * FROM snp WHERE $my_col LIKE ? ORDER BY pos LIMIT 10];