从php调用两个mysql存储过程


CALL TWO MYSQL STORED PROCEDURES FROM PHP

当我尝试从php代码中调用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'));

My calls' functions:

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

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

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