我的功能是千米距离:
DELIMITER //
DROP FUNCTION IF EXISTS distance_miles//
CREATE FUNCTION distance_miles(lat1 FLOAT, lon1 FLOAT, lat2 FLOAT, lon2 FLOAT)
RETURNS FLOAT(120)
BEGIN
DECLARE pi, q1, q2, q3 FLOAT;
DECLARE rads FLOAT DEFAULT 0;
SET pi = PI();
SET lat1 = lat1 * pi / 180;
SET lon1 = lon1 * pi / 180;
SET lat2 = lat2 * pi / 180;
SET lon2 = lon2 * pi / 180;
SET q1 = COS(lon1-lon2);
SET q2 = COS(lat1-lat2);
SET q3 = COS(lat1+lat2);
SET rads = ACOS( 0.5*((1.0+q1)*q2 - (1.0-q1)*q3) );
RETURN 6378.388 * rads * 0.621371192;
END//
DELIMITER ;
我从phpmyadmin运行1个查询。它运行正常。但我在information_schema的例程表中没有看到这一点。
另外,当我尝试从php运行时,我收到了一个错误
$mdb->query($mdb->mes("
DELIMITER //
DROP FUNCTION IF EXISTS distance_miles//
CREATE FUNCTION distance_miles(lat1 FLOAT, lon1 FLOAT, lat2 FLOAT, lon2 FLOAT)
RETURNS FLOAT(120)
BEGIN
DECLARE pi, q1, q2, q3 FLOAT;
DECLARE rads FLOAT DEFAULT 0;
SET pi = PI();
SET lat1 = lat1 * pi / 180;
SET lon1 = lon1 * pi / 180;
SET lat2 = lat2 * pi / 180;
SET lon2 = lon2 * pi / 180;
SET q1 = COS(lon1-lon2);
SET q2 = COS(lat1-lat2);
SET q3 = COS(lat1+lat2);
SET rads = ACOS( 0.5*((1.0+q1)*q2 - (1.0-q1)*q3) );
RETURN 6378.388 * rads * 0.621371192;
END//
DELIMITER ;
"));
这一个:
的 错误:1064 的
已调用:[资源ID#8] ***您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第1行'\ r \ nDELIMITER ~~'附近使用正确的语法
在db查询中:[\ r \ nDELIMITER ~~
请帮助我,会发生什么?完全不明白这一点。
====
选择ROUTINE_TYPE,ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES
另外 - 不要显示这个功能......奇怪这一切...
另外这个: SHOW CREATE FUNCTION distance_miles
回答: MySQL说:文档
...
答案 0 :(得分:1)
mysql_query
不支持多查询。请参阅manual。
您只需删除DELIMITER
行,自行拆分查询,CREATE FUNCTION
就可以了。
$mdb->query($mdb->mes("DROP FUNCTION IF EXISTS distance_miles"));
$mdb->query($mdb->mes("CREATE FUNCTION distance_miles(lat1 FLOAT, lon1 FLOAT, lat2 FLOAT, lon2 FLOAT)
RETURNS FLOAT(120)
BEGIN
DECLARE pi, q1, q2, q3 FLOAT;
DECLARE rads FLOAT DEFAULT 0;
SET pi = PI();
SET lat1 = lat1 * pi / 180;
SET lon1 = lon1 * pi / 180;
SET lat2 = lat2 * pi / 180;
SET lon2 = lon2 * pi / 180;
SET q1 = COS(lon1-lon2);
SET q2 = COS(lat1-lat2);
SET q3 = COS(lat1+lat2);
SET rads = ACOS( 0.5*((1.0+q1)*q2 - (1.0-q1)*q3) );
RETURN 6378.388 * rads * 0.621371192;
END
"));
答案 1 :(得分:0)
$mdb->query($mdb->mes("DROP FUNCTION IF EXISTS distance_miles"));
$mdb->query($mdb->mes("delimiter $
CREATE FUNCTION distance_miles(lat1 FLOAT, lon1 FLOAT, lat2 FLOAT, lon2 FLOAT)
RETURNS FLOAT(120)
DETERMINISTIC BEGIN
DECLARE pi, q1, q2, q3 FLOAT;
DECLARE rads FLOAT DEFAULT 0;
SET pi = PI();
SET lat1 = lat1 * pi / 180;
SET lon1 = lon1 * pi / 180;
SET lat2 = lat2 * pi / 180;
SET lon2 = lon2 * pi / 180;
SET q1 = COS(lon1-lon2);
SET q2 = COS(lat1-lat2);
SET q3 = COS(lat1+lat2);
SET rads = ACOS( 0.5*((1.0+q1)*q2 - (1.0-q1)*q3) );
RETURN 6378.388 * rads * 0.621371192;
END $
"));