mysql - 如何从表中选择所有列?用户在其中选择值

标签 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 并选择基因渗入线(或 il),则应该提取该数据。

我可能没有以正确的方式处理这件事,所以任何建议都会非常有帮助!如果需要更多代码或一般信息,请告诉我:)

最佳答案

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

如果您想使用变量作为表名或列名,则:

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

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

关于mysql - 如何从表中选择所有列?用户在其中选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17860433/

相关文章:

mysql - 在 MySQL 中使用 BLOB 时,是否可以设置允许的图像文件的最大大小?

bash - 如何从 perl 脚本运行 "source"命令 (Linux)?

perl - 如何在 Perl 中将四个字符转换为 32 位 IEEE-754 float ?

php - $_SERVER 变量被放置在我运行 CGI 的主机上

linux - 脚本无法确认文件夹,即使它们存在

mysql - 在一组值中搜索一行的其他值

mysql - 如何根据列的条件连接两个表?

php - 使用 Ajax 在 DIV 中重新加载 MySQL 数据

perl - 使用 our 和 BEGIN block 交互声明的变量

Perl/CGI 脚本在大量上传时失败