2

我正在尝试设置一个 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 并选择基因渗入线(或 il),则应提取该数据。

我可能不会以正确的方式去做,所以任何建议都会非常有帮助!让我知道是否需要更多代码或一般信息:)

4

1 回答 1

3

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

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

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

    my $sql = qq[SELECT * FROM snp WHERE $my_col LIKE ? ORDER BY pos LIMIT 10];
    
于 2013-07-25T14:20:55.677 回答