首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用mysqli多查询执行自定义分隔符查询

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

Stack Overflow用户
提问于 2014-04-11 06:18:15
回答 1查看 1.1K关注 0票数 1

我有以下sql脚本,我想用多个查询来执行它

代码语言:javascript
复制
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 ;,用;替换$$并用多个查询执行,它会起作用吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-11 06:23:38

不,通过MySQL API是不可能的。分号分隔符是不可配置的。它确实是由MySQL服务器端决定的。有关详细信息,请参阅http://dev.mysql.com/doc/refman/5.6/en/c-api-multiple-queries.html

mysql命令行接口通过预解析输入和分隔符分隔语句来支持DELIMITER。然后,它分别执行每个语句。

没有理由需要使用多查询。您应该将DROP FUNCTIONCREATE FUNCTION作为单独的查询运行。

一般来说,使用多查询是个坏主意,因为它为错误的SQL注入问题创造了一个机会。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23004895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档