2012-09-19 3 views
-2

이 스크립트를 실행하려고하면이 오류가 발생합니다. 함수를 호출하기 전에 함수를 작성 중이므로 왜 함수가 존재하지 않는지를 알 수 없습니다.저장된 MySQL 함수를 찾을 수 없습니다.

오류 :

또한

FUNCTION db.fn_distance_cosine does not exist[]

, 동일한 스크립트가 잘 로컬로 실행되지만 다른 컴퓨터에서이 문제가 있습니다.

생각하십니까?

감사합니다.

<?php 

$con = mysql_connect("localhost","username","password") or die ('Error connecting to mysql'); //remote 
$db_selected = mysql_select_db('db', $con); //remote 

if (!$db_selected) { 
    die ('Can\'t use selected database : ' . mysql_error()); 
} 

$lat = $_GET["lat"]; 
$lon = $_GET["lon"]; 
$rows = array(); 

$establishFunction = mysql_query("DROP FUNCTION IF EXISTS fn_distance_cosine; 
CREATE FUNCTION fn_distance_cosine (
    latitude_1 DOUBLE, 
    longitude_1 DOUBLE, 
    latitude_2 DOUBLE, 
    longitude_2 DOUBLE 
) 
RETURNS DOUBLE 
DETERMINISTIC 
SQL SECURITY INVOKER 
RETURN ACOS(
     SIN(RADIANS(latitude_1)) * SIN(RADIANS(latitude_2)) 
     + COS(RADIANS(latitude_1)) * COS(RADIANS(latitude_2)) 
     * COS(RADIANS(longitude_2 - longitude_1)) 
    ) * 3956.547; 
"); 

mysql_query("SET @input_lat :=" . $lat . ";"); 
mysql_query("SET @input_lon :=" . $lon . ";"); 

mysql_query("SET @max_latitude := @input_lat + DEGREES(50.0/3956.547);"); 
mysql_query("SET @min_latitude := @input_lat - DEGREES(50.0/3956.547);"); 
mysql_query("SET @max_longitude := @input_lon + DEGREES(50.0/3956.547/COS(RADIANS(@input_lat)));"); 
mysql_query("SET @min_longitude := @input_lon - DEGREES(50.0/3956.547/COS(RADIANS(@input_lat)));"); 

if($result = mysql_query("SELECT 
     *, 
     fn_distance_cosine(lat, lon, @input_lat, @input_lon) AS distance_in_miles, 
     COUNT(*) AS store_number_count 
    FROM stores 
    JOIN items_stores 
    ON stores.store_number=items_stores.store_number 
    WHERE `lat` BETWEEN @min_latitude AND @max_latitude 
     AND `lon` BETWEEN @min_longitude AND @max_longitude 
    GROUP BY stores.store_code 
    HAVING store_code_count > 1 
    ORDER BY distance_in_miles 
    LIMIT 10; 
    ")){ 
     while ($r = mysql_fetch_assoc($result)){ 
     $rows[] = $r; 
    } 
}else{ 
    //failed. 
    echo (mysql_error()); 
} 

print json_encode($rows); 

mysql_close($con); 

?> 

답변

0

내 db 사용자에게 프로 시저를 저장할 수있는 올바른 권한이 없습니다.

+0

안녕하세요 내 경우에는 쿼리 브라우저 나 Navicat 같은 클라이언트에서 실행될 수 있지만 웹을 통해 실행되지는 않습니다. 권한/이름을 말씀해 주시겠습니까? –

관련 문제