php - 在 MySQL 中创建自己的函数时出现语法错误

标签 php mysql function

我试图在 MySQL 中创建自己的函数,但下面的代码不起作用。有任何语法错误,但 30 分钟后我找不到问题所在。有什么想法吗?

DROP FUNCTION IF EXISTS `gps_distance`;;
CREATE FUNCTION `gps_distance`(lat1 FLOAT,lng1 FLOAT,lat2 FLOAT,lng2 FLOAT) RETURNS float
    READS SQL DATA
    DETERMINISTIC

BEGIN
SET lat1 = lat1 * pi() / 180;
SET lng1 = lng1 * pi() / 180;
SET lat2 = lat2 * pi() / 180;
SET lng2 = lng2 * pi() / 180;

    RETURN acos
    (   cos(lat1)*cos(lng1)*cos(lat2)*cos(lng2)
      + cos(lat1)*sin(lng1)*cos(lat2)*sin(lng2)
      + sin(lat1)*sin(lat2)
    ) * 6372.795;

END;;

错误报告在第 6 行,BEGIN 子句之后。

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 6

是否应该取决于 MySQL 版本(我有 5.6.21)?在 PMA 版本 (4.3.0) 上?我尝试从 PHP 脚本运行此查询,同样的问题。
感谢您的回答。

最佳答案

您确定分隔符设置为分号以外的其他内容吗

DROP FUNCTION IF EXISTS `gps_distance`;

DELIMITER $$

CREATE FUNCTION `gps_distance`(lat1 FLOAT,lng1 FLOAT,lat2 FLOAT,lng2 FLOAT) RETURNS float
READS SQL DATA
DETERMINISTIC

BEGIN
SET lat1 = lat1 * pi() / 180;
SET lng1 = lng1 * pi() / 180;
SET lat2 = lat2 * pi() / 180;
SET lng2 = lng2 * pi() / 180;

    RETURN acos
    (   cos(lat1)*cos(lng1)*cos(lat2)*cos(lng2)
      + cos(lat1)*sin(lng1)*cos(lat2)*sin(lng2)
      + sin(lat1)*sin(lat2)
    ) * 6372.795;

END $$

DELIMITER ;

关于php - 在 MySQL 中创建自己的函数时出现语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29303690/

相关文章:

mysql - 如何从MySQL中的每个类别中获取随机记录?

php - 使用 php 搜索和删除文章中未使用的图像

python - Python和PyQt:从另一个类运行函数

r - 将一个数字更改为 R 中另一个数字的整数倍?

php - 在循环中创建对象时检查内存使用情况?

PHP脚本显示图像BLOB执行了两次?

php - 从 PHP 脚本执行包含 FFmpeg 的 shell 脚本

mysql - 如何通过将两行添加到一行来解决这个Mysql问题

javascript - 将 PHP var 传递给 js 函数

javascript - 打开时尝试将数据从数据库传递到引导模式。我该怎么做呢?