【问题标题】:mysql perl placeholder rulesmysql perl 占位符规则
【发布时间】:2011-11-09 02:11:27
【问题描述】:

MySQL、Perl

以下选择在没有占位符的情况下可以正常工作,但在占位符的情况下则不行。它不会生成任何 SQL 错误,但会返回所有空白/零 - 与没有占位符的同一语句的计数不同。

my $sql="SELECT ?, SUM(IF(H1='1',1,0)) AS banner1 FROM table_name WHERE (?!='' and ? IS NOT NULL) GROUP BY ?";

my $sth = $dbh->prepare($sql);

my $variable = "Q1";

$sth->execute($variable, $variable, $variable, $variable);   

我做错了什么?

我是否试图以非预期的方式使用占位符?当我只在 WHERE 子句中使用占位符时,它可以工作。当我在 SELECT 或 GROUP BY 子句中使用占位符时,它不起作用。是这个问题吗?占位符只能在 WHERE 子句中使用?

【问题讨论】:

    标签: mysql perl placeholder


    【解决方案1】:

    您不能在 SQL 语句的 SELECT 部分使用占位符。这在the documentation 中有描述:

    对于大多数驱动程序,占位符不能用于任何会阻止数据库服务器验证语句并为其创建查询执行计划的语句元素。例如:

    "SELECT name, age FROM ?"         # wrong (will probably fail)
    "SELECT name, ?   FROM people"    # wrong (but may not 'fail')
    

    【讨论】:

      【解决方案2】:

      您不能使用占位符来替换列名或表名。即使在你的 WHERE 子句中,它也没有做你认为它正在做的事情。当您将 Q1 替换为占位符时,您会得到:

      WHERE ('Q1'!='' and 'Q1' IS NOT NULL)
      

      即一个永远为真的表达式。

      【讨论】:

        猜你喜欢
        • 2012-03-08
        • 2015-06-22
        • 2015-08-07
        • 1970-01-01
        • 2011-08-20
        • 1970-01-01
        • 2015-06-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多