我的php脚本中有以下功能:
$fcnsql = "CREATE FUNCTION CUST_ORDER(index INT, weekday INT, curweekday INT, endtime TIME, curtime TIME)
RETURNS INT
BEGIN
DECLARE custom_weekday INT;
IF (weekday=curweekday AND curtime>endtime) THEN
SET custom_weekday = index+7;
ELSE
SET custom_weekday = index;
END IF;
RETURN custom_weekday;
END";
$test=mysql_query($fcnsql) or die (mysql_error());
我得到的输出是我有SQL语法错误。知道什么是错的吗?
我认为有些事情可能是问题:
我对此非常陌生,所以非常感谢任何帮助!
答案 0 :(得分:1)
编辑: @Pang称之为 - 索引是一个保留字。如果您不想更改名称,请将其包装在反引号中:
`index`
我会把剩下的华夫饼干放在原处,因为你不确定DELIMITER。 :)
-
错误可能是您没有设置DELIMITER,正如您在某些示例中所注意到的那样。将这些添加到函数的顶部和底部:
$fcnsql = "
DELIMITER #
CREATE FUNCTION CUST_ORDER2(`index` INT, weekday INT, curweekday INT, endtime TIME, curtime TIME) RETURNS INT
BEGIN
DECLARE custom_weekday INT;
IF (weekday=curweekday AND curtime>endtime) THEN
SET custom_weekday = `index`+7;
ELSE
SET custom_weekday = `index`;
END IF;
RETURN custom_weekday;
END;
#
DELIMITER ;
";
原因是“;”是MySQL的默认分隔符(即告诉MySQL它已经命中一个语句的结尾)。你的函数的语句需要分隔符,但是当MySQL保存它时,你不希望MySQL认为它找到了语句的结尾并停止处理该函数。因此,您将分隔符更改为您未在函数中使用的字符,然后再将其更改回来。