2014-04-11 7 views
1
나는 다음과 같은 SQL 스크립트가

와 사용자 정의 구분 기호 쿼리를 실행하고 나는 multiquery어떻게 할 수있는 방법이 있나요 mysqli multiquery

DELIMITER $$ 
DROP FUNCTION IF EXISTS `getAttendanceHistoryDates`$$ 

CREATE FUNCTION getAttendanceHistoryDates(processDate date) 
    RETURNS TEXT 
    DETERMINISTIC 
    LANGUAGE SQL 
BEGIN 

    DECLARE minDate date; 
    DECLARE startYear int; 
    DECLARE endYear int; 
    DECLARE dateString TEXT; 

    SET minDate = (SELECT MIN(date) FROM `ohrm_attendance_report`); 
    SET startYear = YEAR(minDate); 
    SET endYear = YEAR(processDate); 

    SET dateString = processDate; 
    WHILE startYear < endYear DO 
    SET dateString = CONCAT(dateString,'|',CONCAT(startYear, '-12-31')); 
    SET startYear = startYear + 1; 
    END WHILE; 

    RETURN dateString; 
END; 
$$ 
DELIMITER ; 

그것을 실행하려는? 스크립트에서 DELIMITER $$DELIMITER ;을 제거하고을 ;으로 바꾸고 다중 쿼리를 실행하면 작동합니까?

답변

1

아니요, MySQL API를 통해 가능하지 않습니다. 세미콜론 분리 기호는 구성 할 수 없습니다. MySQL 서버 측에서 실제로 결정되었습니다. 자세한 내용은 http://dev.mysql.com/doc/refman/5.6/en/c-api-multiple-queries.html

을 참조하십시오. mysql 명령 줄 인터페이스는 입력을 미리 파싱하고 구분 기호로 문을 분리하여 DELIMITER을 지원합니다. 그런 다음 각 명령문을 개별적으로 실행합니다.

다중 쿼리를 사용해야하는 이유가 없습니다. DROP FUNCTIONCREATE FUNCTION을 개별 쿼리로 실행해야합니다.

멀티 쿼리를 사용하면 일반적으로 bad SQL injection problems에 대한 기회가 만들어 지므로 나쁜 생각입니다.