我想在我的Joomla 2.5组件安装程序中包括创建mysql函数。这是功能:
DELIMITER $$ DROP FUNCTION IF EXISTS getDistance $$ CREATE FUNCTION `getDistance` ( lat1 DECIMAL( 18, 12 ) , lng1 DECIMAL( 18, 12 ) , lat2 DECIMAL( 18, 12 ) , lng2 DECIMAL( 18, 12 ) ) RETURNS DECIMAL( 18, 12 ) DETERMINISTIC BEGIN DECLARE `distance` DECIMAL( 18, 12 ) ; SELECT ( 6371 * acos( cos( radians( lat1 ) ) * cos( radians( lat2 ) ) * cos( radians( lng2 ) - radians( lng1 ) ) + sin( radians( lat1 ) ) * sin( radians( lat2 ) ) ) ) INTO `distance`; RETURN `distance`; END $$ DELIMITER ;
如果我使用站点用户和密码登录到phpmyadmin,则该函数的创建就很好。
我试过了:
没有工作。
sql文件是不带bom的utf8。
如果我使用sql安装程序,这是两次显示的错误:
JInstaller: :Install: Error SQL DB function failed with error number 1327 Undeclared variable: distance SQL=SELECT ( 6371 * acos( cos( radians( lat1 ) ) * cos( radians( lat2 ) ) * cos( radians( lng2 ) - radians( lng1 ) ) + sin( radians( lat1 ) ) * sin( radians( lat2 ) ) ) ) INTO `distance`; SQL = SELECT ( 6371 * acos( cos( radians( lat1 ) ) * cos( radians( lat2 ) ) * cos( radians( lng2 ) - radians( lng1 ) ) + sin( radians( lat1 ) ) * sin( radians( lat2 ) ) ) ) INTO `distance`;
如果我从组件的控制器中运行$ db-> getErrorMsg(),这是我得到的错误。
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 'DELIMITER 拢拢' at line 1 SQL=DELIMITER 拢拢 DROP FUNCTION IF EXISTS getDistance 拢拢 CREATE FUNCTION `xxyx_getDistance` ( lat1 DECIMAL( 18, 12 ) , lng1 DECIMAL( 18, 12 ) , lat2 DECIMAL( 18, 12 ) , lng2 DECIMAL( 18, 12 ) ) RETURNS DECIMAL( 18, 12 ) DETERMINISTIC BEGIN DECLARE `xxyx_distance` DECIMAL( 18, 12 ) ; SELECT ( 6371 * acos( cos( radians( lat1 ) ) * cos( radians( lat2 ) ) * cos( radians( lng2 ) - radians( lng1 ) ) + sin( radians( lat1 ) ) * sin( radians( lat2 ) ) ) ) INTO `xxyx_distance`; RETURN `xxyx_distance`; END 拢拢 DELIMITER ;
DELIMITER 是一个客户端构造,它告诉客户端语句的结尾在哪里,而不是服务器。
DELIMITER
如果您使用从“创建功能”一直到函数定义的最后“结束”的所有内容来编写字符串,则不需要“ DELIMITER”语句,也不需要在“结束”之后添加“ $$”或其他符号。 。并执行该字符串作为对您的连接对象的查询,服务器应该理解它。首先执行的“ DROP FUNCTION IF EXISTS function_name”也是如此。