Php 在后台执行存储过程?

Php 在后台执行存储过程?,php,mysql,stored-procedures,mysql-event,Php,Mysql,Stored Procedures,Mysql Event,如何在后台运行mysql存储过程而不创建加载网站以等待过程的结果完成 DELIMITER $$ USE `simbakda_sensus`$$ DROP PROCEDURE IF EXISTS `info`$$ CREATE DEFINER=`potutu`@`%` PROCEDURE `info`(unit VARCHAR(20)) BEGIN DELETE FROM info WHERE kd_unit=unit; INSERT INTO info SEL

如何在后台运行mysql存储过程而不创建加载网站以等待过程的结果完成

DELIMITER $$

USE `simbakda_sensus`$$

DROP PROCEDURE IF EXISTS `info`$$

CREATE DEFINER=`potutu`@`%` PROCEDURE `info`(unit VARCHAR(20))
BEGIN   
    DELETE FROM info WHERE kd_unit=unit;
    INSERT INTO info
    SELECT unit,'a' AS kib ,SUM(a) AS a_sen,SUM(b) AS a_tot,(SUM(b)-SUM(a)) AS a_non FROM (
    SELECT unit,COUNT(*) AS a,'0' AS b FROM trkib_a WHERE kd_unit=unit AND STATUS='1'
    UNION ALL
    SELECT unit,'0' AS a, COUNT(*) AS b FROM trkib_a WHERE kd_unit=unit
    )a
    UNION ALL
    SELECT unit,'b' AS kib ,SUM(a) AS a_sen,SUM(b) AS a_tot,(SUM(b)-SUM(a)) AS a_non FROM (
    SELECT unit,COUNT(*) AS a,'0' AS b FROM trkib_b WHERE kd_unit=unit AND STATUS='1'
    UNION ALL
    SELECT unit,'0' AS a, COUNT(*) AS b FROM trkib_b WHERE kd_unit=unit
    )b
    UNION ALL
    SELECT unit,'c' AS kib ,SUM(a) AS a_sen,SUM(b) AS a_tot,(SUM(b)-SUM(a)) AS a_non FROM (
    SELECT unit,COUNT(*) AS a,'0' AS b FROM trkib_c WHERE kd_unit=unit AND STATUS='1'
    UNION ALL
    SELECT unit,'0' AS a, COUNT(*) AS b FROM trkib_c WHERE kd_unit=unit
    )c
    UNION ALL
    SELECT unit,'d' AS kib ,SUM(a) AS a_sen,SUM(b) AS a_tot,(SUM(b)-SUM(a)) AS a_non FROM (
    SELECT unit,COUNT(*) AS a,'0' AS b FROM trkib_d WHERE kd_unit=unit AND STATUS='1'
    UNION ALL
    SELECT unit,'0' AS a, COUNT(*) AS b FROM trkib_d WHERE kd_unit=unit
    )d
    UNION ALL
    SELECT unit,'e' AS kib ,SUM(a) AS a_sen,SUM(b) AS a_tot,(SUM(b)-SUM(a)) AS a_non FROM (
    SELECT unit,COUNT(*) AS a,'0' AS b FROM trkib_e WHERE kd_unit=unit AND STATUS='1'
    UNION ALL
    SELECT unit,'0' AS a, COUNT(*) AS b FROM trkib_e WHERE kd_unit=unit
    )e
    UNION ALL
    SELECT unit,'f' AS kib ,SUM(a) AS a_sen,SUM(b) AS a_tot,(SUM(b)-SUM(a)) AS a_non FROM (
    SELECT unit,COUNT(*) AS a,'0' AS b FROM trkib_f WHERE kd_unit=unit AND STATUS='1'
    UNION ALL
    SELECT unit,'0' AS a, COUNT(*) AS b FROM trkib_f WHERE kd_unit=unit
    )f;
END$$

DELIMITER ;

你有几个好的选择

如果您需要定期运行此功能(例如每小时或每个周日03:00或其他时间),请使用。(请注意,其中一些每月5美元的共享主机服务不允许在其MySQL服务器上发生事件。)

启用事件计划程序:

SET GLOBAL event_scheduler = ON;
然后创建事件对象。它将驻留在您的MySQL数据库中,并按照您指定的时间表运行

CREATE EVENT myevent_01
ON SCHEDULE EVERY 1 HOUR
STARTS CURRENT_TIMESTAMP
DO CALL simbakda_sensus.info;
另一种选择是一次性活动。同样的交易,但它只运行一次就消失了。每次要运行过程时,都必须重新创建事件。这是程序的纯“后台”执行

CREATE EVENT run_info_now
ON SCHEDULE AT CURRENT_TIMESTAMP
DO CALL simbakda_sensus.info;
第三种方式:

创建一个运行您的过程的小php页面。然后在主网页中放置一个iframe,并从中调用小页面。sp完成运行后,您可以使小页面显示“Info done!”或其他消息

第四条路

一些linux/FreeBSD/Unix服务器允许用户设置称为cron作业的定期计划事件。大话题:在这里阅读


专业提示:创建日志表。使每个数据维护过程在运行时在表中插入一行,显示当前时间和有关该过程的其他信息。我向您保证,如果您的系统被大量使用,您将不时查看此日志以确保正常运行。

是否有
EXEC
命令的源代码?我从来没有见过MySQL。我会删除我的答案,因为你的答案更全面。但我不太清楚EXEC。没错,@PaulSpiegel,谢谢!这是
呼叫
。我恳求在大脑上安装SQL Server。可能是