Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在mysql中正确设置prepare语句_Mysql_Sql - Fatal编程技术网

如何在mysql中正确设置prepare语句

如何在mysql中正确设置prepare语句,mysql,sql,Mysql,Sql,当我设置以下sql并执行它们时。这些SQL已正确读取并存储到@myquery SELECT CONCAT("SELECT id ", ",coalesce( sum( IF( snapshot_day = date(now() - INTERVAL 3 DAY), 1 ,0) )) AS '",date(now() - INTERVAL 3 DAY),"' ", ",coalesce( sum( IF( snapshot_da

当我设置以下sql并执行它们时。这些SQL已正确读取并存储到
@myquery

SELECT CONCAT("SELECT id ",
",coalesce( sum( IF( snapshot_day = date(now() - INTERVAL 3 DAY), 1 ,0) )) AS '",date(now() - INTERVAL 3 DAY),"' ",
",coalesce( sum( IF( snapshot_day = date(now() - INTERVAL 2 DAY), 1 ,0) )) AS '",date(now() - INTERVAL 2 DAY),"' ",
",coalesce( sum( IF( snapshot_day = date(now() - INTERVAL 1 DAY), 1 ,0) )) AS '",date(now() - INTERVAL 1 DAY),"' ",
"FROM table",
"WHERE type in ('Daily') ",
"GROUP BY 1") INTO @myquery;

SELECT @myquery;

PREPARE stmt FROM @myquery;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
但是当
PREPARE
语句时,返回以下错误

错误代码:1064。您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解第1行“in('Daily')groupby 1”附近使用的正确语法

这个问题的错误点是什么?这是否取决于其服务器版本

看来没有问题

如果有人有意见,请告诉我


谢谢

表名和WHERE关键字之间没有空格:

"FROM table",
"WHERE type in ('Daily') ",
因此,将片段连接在一起后,您的查询将变成:

... FROM tableWHERE type in ('Daily') ...
MySQL会认为您有一个名为
tableWHERE
的表,至少从语法的角度来看,这是可以的。它尚未检查此表是否存在

然后给它一个表别名
type
,在语法上仍然可以

但是在中,表别名后面紧跟着
,这让MySQL感到困惑。对于
谓词中的
,这不是正确的位置

您可以通过以下方式解决此问题:

"FROM table ",
"WHERE type in ('Daily') ",

尝试对
CONCAT
使用单引号,然后对
IN
子句中的
字符串文本转义单引号。此外,您应该只为别名提供文字名称

SELECT CONCAT('SELECT id',
'合并(总和(如果(快照日=日期(现在()-间隔3天),1,0))为现在的日减去日3',
'合并(总和(如果(snapshot_day=DATE(NOW()-INTERVAL 2 day),1,0))为NOW_减_2',
'合并(总和(如果(snapshot_day=DATE(NOW()-INTERVAL 1 day),1,0))为NOW_减_1',
“从表中”,
'其中键入('Daily'),
“分组依据1”)到@myquery中;

显示
选择@myquery的输出
日期(现在()-间隔1天)
=
当前日期-间隔1天