【问题标题】:CALL TWO MYSQL STORED PROCEDURES FROM PHP从 PHP 调用两个 MYSQL 存储过程
【发布时间】:2014-07-23 09:37:16
【问题描述】:

当我尝试从我的 php 代码中调用 2 个存储过程时遇到此错误....

我该如何进行这 2 次通话?我可以使用哪种方法??谢谢!!

错误:

Error Number: 2014

Commands out of sync; you can't run this command now

当我调用函数时...

$aFrecClientes = $this->summary_model->get_frecClientes($this->session->userdata('USER_ID'));

$aResumenAnual = $this->summary_model->get_resumenAnual($anyo,$this->session->userdata('USER_ID'));

我的通话功能:

public function get_frecClientes($id_empresa){
        $oQuery = $this->db->query("CALL GET_FRECUENCIACLIENTES(1);");


        $aResult = $oQuery->result_array();
        return $aResult;
     } 


     public function get_resumenAnual(){
        $oQuery = $this->db->query("CALL GET_RESUMENANUAL (1, 102);");



        $aResult = $oQuery->result_array();

        return $aResult;
     } 

和我的存储过程:

BEGIN
SELECT uu.MES, SUM(uu.INGRESOS) INGRESOS, SUM(uu.GASTOS) GASTOS, SUM(uu.INGRESOS)-SUM(uu.GASTOS) RESULTAT
FROM ( 
       -- INGRESOS
       SELECT MONTH(FECHA) MES, 
               SUM(F.TOTALFACTURA) INGRESOS,
               0 GASTOS
       FROM FACTURASCLIENTES F
       LEFT JOIN CLIENTES C ON C.IDCLIENTE = F.IDCLIENTE
       WHERE C.IDEMPRESA = IDEMPRESA 
       AND F.FECHABORRADO IS NULL AND YEAR(FECHA)=ANYO
       GROUP BY MONTH(FECHA)

       UNION

       SELECT MONTH(FECHA) MES, 
                SUM(IMPORTE) INGRESOS,
                0 GASTOS
       FROM TICKETS 
       INNER JOIN  TIPOSTICKETS on (TICKETS.IDTIPOTICKET = TIPOSTICKETS.IDTIPOTICKET)
       INNER JOIN TRADUCCIONES on (TIPOSTICKETS.IDTRADUCCION = TRADUCCIONES.IDTRADUCCION AND TIPOSTICKETS.IDTRADUCCIONTABLA  = TRADUCCIONES.IDTRADUCCIONTABLA ) 
       WHERE IDEMPRESA = IDEMPRESA 
       AND TRADUCCIONES.ESP = "INGRESOS" AND TICKETS.FECHABORRADO IS NULL
       AND YEAR(FECHA)=ANYO
       GROUP BY MONTH(FECHA)

       UNION

       -- GASTOS
       SELECT MONTH(FECHA) MES, 
               0 INGRESOS,
               SUM(FP.TOTALFACTURA) GASTOS
       FROM FACTURASPROVEEDORES FP
       INNER JOIN PROVEEDORES P on P.IDPROVEEDOR = FP.IDPROVEEDOR
       WHERE P.IDEMPRESA = IDEMPRESA 
       AND FP.FECHABORRADO IS NULL
       AND YEAR(FECHA)=ANYO
       GROUP BY MONTH(FECHA)


       UNION

       SELECT MONTH(FECHA) MES, 
                0 INGRESOS,
                SUM(NETO) GASTOS
       FROM TICKETS
       INNER JOIN  TIPOSTICKETS on (TICKETS.IDTIPOTICKET = TIPOSTICKETS.IDTIPOTICKET)
       INNER JOIN TRADUCCIONES on (TIPOSTICKETS.IDTRADUCCION = TRADUCCIONES.IDTRADUCCION AND TIPOSTICKETS.IDTRADUCCIONTABLA  = TRADUCCIONES.IDTRADUCCIONTABLA ) 
       WHERE IDEMPRESA = IDEMPRESA 
       AND TRADUCCIONES.ESP = "INGRESOS" AND TICKETS.FECHABORRADO IS NULL
       AND YEAR(FECHA)=ANYO
       GROUP BY MONTH(FECHA)
       ) uu   
GROUP BY uu.MES;
END

我的第二个程序:

BEGIN
        DECLARE NumeroFacturas bigint;
        Select NumeroFacturas = SUM(TOTALFACTURA) 
        from FACTURASCLIENTES FC
        inner join CLIENTES C on C.IDCLIENTE = FC.IDCLIENTE
        where FC.FECHABORRADO IS NULL and C.IDEMPRESA = IDEMPRESA;

        Select C.NOMBRE, ROUND((SUM(TOTALFACTURA) * 100 / NumeroFacturas),0) FRECUENCIA
        From CLIENTES C
        inner join FACTURASCLIENTES FC on C.IDCLIENTE = FC.IDCLIENTE
        where C.IDEMPRESA = IDEMPRESA and FC.FECHABORRADO IS NULL
        GROUP BY C.NOMBRE
        ORDER BY FRECUENCIA DESC
        LIMIT 6;
END

【问题讨论】:

    标签: php mysql sql stored-procedures


    【解决方案1】:

    参考以下链接: http://dev.mysql.com/doc/refman/5.0/en/commands-out-of-sync.html http://dev.mysql.com/doc/refman/5.7/en/mysql-use-result.html

    上述错误的原因是您没有使用第一个查询的结果并触发第二个查询。

    【讨论】:

      猜你喜欢
      • 2014-09-07
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      • 2018-12-29
      相关资源
      最近更新 更多