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子句吗?
发布于 2011-11-09 01:22:56
不能在SQL语句的SELECT部分使用占位符。这在the documentation中进行了描述
对于大多数驱动程序,占位符不能用于阻止数据库服务器验证语句和为其创建查询执行计划的语句的任何元素。例如:
"SELECT name, age FROM ?" # wrong (will probably fail)
"SELECT name, ? FROM people" # wrong (but may not 'fail')发布于 2011-11-09 02:11:28
不能使用占位符替换列或表名。即使在WHERE子句中,它也没有做您认为它正在做的事情。当你用Q1代替占位符时,你会得到:
WHERE ('Q1'!='' and 'Q1' IS NOT NULL)即始终为真的表达式。
https://stackoverflow.com/questions/8054421
复制相似问题