在PHP中编写MySql函数

时间:2012-11-23 02:32:23

标签: php mysql function syntax

我的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语法错误。知道什么是错的吗?

我认为有些事情可能是问题:

  1. 我不确定它是否是在我的函数中将TIME变量作为参数的正确语法。
  2. 我在网上看到一些示例代码,在mysql函数之前,有一行“delimiter $$” - 我不确定这是什么以及我是否需要使用它。
  3. 我对此非常陌生,所以非常感谢任何帮助!

1 个答案:

答案 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认为它找到了语句的结尾并停止处理该函数。因此,您将分隔符更改为您未在函数中使用的字符,然后再将其更改回来。