-2

我的 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 函数之前,有一行“分隔符 $$”——我不确定这是做什么用的,以及如何/是否需要使用它。

我对此很陌生,所以任何帮助将不胜感激!

4

1 回答 1

1

编辑: @Pang 称之为 - index 是保留字。如果您不想更改名称,请将其包装在反引号中:

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

于 2012-11-23T02:39:47.657 回答