如何使用mysqli multiquery执行自定义分隔符查询

时间:2014-04-11 06:18:16

标签: php mysql mysqli-multi-query

我有以下sql脚本,我想用多查询

执行它
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 个答案:

答案 0 :(得分: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创造了机会。