首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql perl占位符规则

mysql perl占位符规则
EN

Stack Overflow用户
提问于 2011-11-09 01:16:25
回答 2查看 732关注 0票数 1

MySQL,Perl

下面的选择在没有占位符的情况下工作得很好,但在占位符方面就不行了。它不会生成任何SQL错误,但它会返回所有空格/零-与没有占位符的同一语句的计数不同。

代码语言:javascript
复制
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子句吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-09 01:22:56

不能在SQL语句的SELECT部分使用占位符。这在the documentation中进行了描述

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

代码语言:javascript
复制
"SELECT name, age FROM ?"         # wrong (will probably fail)
"SELECT name, ?   FROM people"    # wrong (but may not 'fail')
票数 4
EN

Stack Overflow用户

发布于 2011-11-09 02:11:28

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

代码语言:javascript
复制
WHERE ('Q1'!='' and 'Q1' IS NOT NULL)

即始终为真的表达式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8054421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档