Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rubens Ferreira de Couto

[Resolvido] função não retorna dados à pagina

Recommended Posts

Prezados Senhores,

pelo codigo abaixo descrito consigo buscar na base de dados o que preciso, porém quando insiro em uma função a mesma consulta SQL, não me retorna os dados da mesma forma que diretamente na página porque a consulta só retorna 1 linha.

==primeiro codigo==

require_once('config/dbconfig.php');
    include "functions.php";
    $contapd = 1;
    $mes = 2;
    $ano = 2015;
    $tipo = 1;
    $data_i = "2020-01-02";
    $data_f = "2020-01-18";    

    $pdo = new Database();
    $db = $pdo->dbConnection();
    
    //$stmt = $db->prepare("SELECT * FROM lc_movimento WHERE idconta='$contapd' and mes='$mes_hoje' and ano='$ano_hoje'");
    //$stmt = $db->prepare("SELECT * FROM lc_movimento WHERE month(datamov)='$mes_hoje' and year(datamov)='$ano_hoje' and idconta='$contapd'");
    $stmt = $db->prepare("SELECT idconta, DATE_FORMAT(datamov,'%m/%Y') AS ref, DATE_FORMAT(datamov,'%m') AS mes, DATE_FORMAT(datamov,'%Y') AS ano,
                        SUM(IF(tipo = 0, valor, 0)) AS debito,
                        SUM(IF(tipo = 1, valor, 0)) AS credito,
                        (SELECT SUM(IF(tipo = 1, valor, -valor)) FROM lc_movimento AS L2
                        WHERE DATE_FORMAT(lc_movimento.datamov,'%Y%m') >=
                        DATE_FORMAT(L2.datamov,'%Y%m') and
                        idconta = lc_movimento.idconta) AS saldo
                        FROM lc_movimento WHERE idconta =:contapd and mes=:mes and ano=:ano
                        GROUP BY idconta, MONTH(datamov), YEAR(datamov) ORDER BY YEAR(datamov), MONTH(datamov);");
    $stmt->bindparam(':contapd', $contapd );
    $stmt->bindparam(':mes', $mes );
    $stmt->bindparam(':ano', $ano );
    $stmt->execute();
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 
    
    foreach($result as $linha){
        ?>
        <table border="1">
            <th>Conta</th>
            <th>Ref</th>
            <th>Mes</th>
            <th>Ano</th>
            <th>Saldo Ant.</th>
            <th>Debito</th>
            <th>Credito</th>
            <th>Saldo</th>
            <tr>
                <td><?php echo $linha['idconta']; ?> </td>
                <td><?php echo $linha['ref']; ?> </td>
                <td><?php echo $linha['mes']; ?> </td>
                <td><?php echo $linha['ano']; ?> </td>
                <?php $anterior = $linha['saldo'] + $linha['debito'] - $linha['credito']; ?>
                <td><?php echo formata_dinheiro($anterior); ?> </td>
                <td><?php echo formata_dinheiro($linha['debito']); ?> </td>
                <td><?php echo formata_dinheiro($linha['credito']); ?> </td>
                <td><?php echo formata_dinheiro($linha['saldo']); ?> </td>
            </tr>
        </table>
    <?php     
     }
?>

== desta forma está retornando corretamente ==

Já dentro da função não retorna. Os dados de conexão da função estão corretos porque outras funções já estão retornando os dados.

=========================== função saldo anterior ========================================================

// FUNÇÃO PARA RETORNAR OS SALDO ANTERIOR, ENTRADAS, SAIDAS E SALDO ATUAL DO MÊS E ANO SELECIONADOS
    public function dados_saldo($idconta, $mes_hoje, $ano_hoje )
    {
        try
        {
            $stmt = $this->conn->prepare("SELECT idconta, DATE_FORMAT(datamov,'%m/%Y') AS data, DATE_FORMAT(datamov,'%m') AS mes, DATE_FORMAT(datamov,'%Y') AS ano, SUM(IF(tipo = 0, valor, 0)) AS debito, SUM(IF(tipo = 1, valor, 0)) AS credito,(SELECT SUM(IF(tipo = 1, valor, -valor)) FROM lc_movimento AS L2 WHERE DATE_FORMAT(lc_movimento.datamov,'%Y%m') >=DATE_FORMAT(L2.datamov,'%Y%m') and idconta = lc_movimento.idconta) AS saldo FROM lc_movimento WHERE idconta =:contapd and mes=:mes and ano=:ano GROUP BY idconta, mes, ano ORDER BY ano, mes;");
            $stmt->execute(array(
            ':contapd'=>$idconta,    
            ':mes'=>$mes_hoje,
            ':ano'=>$ano_hoje));
            
            $result=$stmt->fetch(PDO::FETCH_ASSOC);
            
            return $result['data'];
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
    }

 

O que está dando errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já comsegui resolver o problema. corrigido a função:

=============================================

public function dados_saldo($idconta, $mes_hoje, $ano_hoje )
    {
        try
        {
            $stmt = $this->conn->prepare("SELECT idconta, DATE_FORMAT(datamov,'%m/%Y') AS ref, DATE_FORMAT(datamov,'%m') AS mes, DATE_FORMAT(datamov,'%Y') AS ano, SUM(IF(tipo = 0, valor, 0)) AS debito, SUM(IF(tipo = 1, valor, 0)) AS credito,(SELECT SUM(IF(tipo = 1, valor, -valor)) FROM lc_movimento AS L2 WHERE DATE_FORMAT(lc_movimento.datamov,'%Y%m') >=DATE_FORMAT(L2.datamov,'%Y%m') and idconta = lc_movimento.idconta) AS saldo FROM lc_movimento WHERE idconta =:contapd and mes=:mes and ano=:ano GROUP BY idconta, mes, ano ORDER BY ano, mes;");
            $stmt->bindParam(":contapd", $idconta, PDO::PARAM_INT);
            $stmt->bindParam(":mes", $mes_hoje, PDO::PARAM_INT);
            $stmt->bindParam(":ano", $ano_hoje, PDO::PARAM_INT);
            $stmt->execute();
            
            $result=$stmt->fetchAll(PDO::FETCH_ASSOC);
            
            return $result;
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
    }

=============================================

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já comsegui resolver o problema. corrigido a função:

=============================================

public function dados_saldo($idconta, $mes_hoje, $ano_hoje )
    {
        try
        {
            $stmt = $this->conn->prepare("SELECT idconta, DATE_FORMAT(datamov,'%m/%Y') AS ref, DATE_FORMAT(datamov,'%m') AS mes, DATE_FORMAT(datamov,'%Y') AS ano, SUM(IF(tipo = 0, valor, 0)) AS debito, SUM(IF(tipo = 1, valor, 0)) AS credito,(SELECT SUM(IF(tipo = 1, valor, -valor)) FROM lc_movimento AS L2 WHERE DATE_FORMAT(lc_movimento.datamov,'%Y%m') >=DATE_FORMAT(L2.datamov,'%Y%m') and idconta = lc_movimento.idconta) AS saldo FROM lc_movimento WHERE idconta =:contapd and mes=:mes and ano=:ano GROUP BY idconta, mes, ano ORDER BY ano, mes;");
            $stmt->bindParam(":contapd", $idconta, PDO::PARAM_INT);
            $stmt->bindParam(":mes", $mes_hoje, PDO::PARAM_INT);
            $stmt->bindParam(":ano", $ano_hoje, PDO::PARAM_INT);
            $stmt->execute();
            
            $result=$stmt->fetchAll(PDO::FETCH_ASSOC);
            
            return $result;
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
    }

=============================================

 

Aos que se fizerem interessados, consegui fazer uma consulta ao banco de dados que me retornou os dados que eu precisava para um demonstrativo de balanço de fluxo de caixa.

a minha tabela contem a seguinte configuração:

Nome: lc_movimento

Campos: Id, tipo, dia, mes, ano, Idlivro, folha, cat, descricao, valor, datamov, idconta, data_lancamento

Consulta: idconta, mes, ano, credito, debito, bal_mes, saldo_aa, credito_acum, debito_acum.

==================================================================================

Abaixo a consulta:

SELECT idconta, month(datamov) AS mes, year(datamov) AS ano,
SUM(IF(lc_movimento.tipo = 1, valor, 0)) AS credito,
SUM(IF(lc_movimento.tipo = 0, -1*valor, 0)) AS debito,
(SELECT SUM(IF(tipo = 1, valor, -1*valor)) FROM lc_movimento AS L2
WHERE DATE_FORMAT(lc_movimento.datamov,'%Y%m') =
DATE_FORMAT(L2.datamov,'%Y%m') and
idconta = lc_movimento.idconta) AS bal_mes,
(SELECT SUM(IF(tipo = 1, valor, -1*valor)) FROM lc_movimento AS L2
WHERE DATE_FORMAT(lc_movimento.datamov,'%Y%m') >=
DATE_FORMAT(L2.datamov,'%Y%m') and
idconta = lc_movimento.idconta) AS saldo_atual,
(SELECT SUM(IF(tipo = 1, valor, -1*valor)) FROM lc_movimento AS L2
WHERE year(lc_movimento.datamov) >
year(L2.datamov) and 
idconta = lc_movimento.idconta) AS saldo_aa,
(SELECT SUM(valor) FROM lc_movimento AS L3
WHERE tipo=1 and year(lc_movimento.datamov) = year(L3.datamov) and month(lc_movimento.datamov) >=
month(L3.datamov) and 
idconta = lc_movimento.idconta) AS credito_acum,
(SELECT SUM(valor)*-1 FROM lc_movimento AS L3
WHERE tipo=0 and year(lc_movimento.datamov) = year(L3.datamov) and month(lc_movimento.datamov) >=
month(L3.datamov) and 
idconta = lc_movimento.idconta) AS debito_acum
FROM lc_movimento
WHERE idconta=1 and year(datamov)=2015 and month(datamov)<=5
GROUP BY idconta, ano, mes;

======================================================================================

O retorno dos dados ficaram assim:

idconta mes ano credito debito bal_mes saldo_atual saldo_aa credito_acum debito_acum  
1 1 2015 1490.00 -1510.00 -20.00 550.00 570.00 1490.00 -1510.00
1 2 2015 1429.50 -1169.00 260.50 810.50 570.00 2919.50 -2679.00
1 3 2015 2270.00 -1866.00 404.00 1214.50 570.00 5189.50 -4545.00
1 4 2015 1190.00 -2202.50 -1012.50 202.00 570.00 6379.50 -6747.50
1 5 2015 2206.50 -2320.00 -113.50 88.50 570.00 8586.00 -9067.50

 

Boa sorte e bons aproveitamento a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Fábio BN
      Olá pessoal.

      Preciso fazer um Select Count, e um Setect Count com Group By numa tabela para pegar a quantidade total de registros.
      Exemplo:
       
      $estoque = "1" $var_total_geral=$pdo->prepare("select count(categoria) from loja_virtual WHERE estoque=:estoque"); $var_total_geral->bindValue(":estoque",$estoque); $var_total_geral->execute(); Depois preciso pegar e exibir a quantidade total  do código acima, porém tem algum erro acima e não sei qual comando usar para exibir a quantidade total.

      Depois preciso fazer outros select agrupado, onde eu preciso saber as quantidade de registros de cada categoria.
      Exemplo:
      Categoria 1 ( 40 Registros )
      Categoria 2 ( 32 Registros )
      Categoria 3 ( 18 Registros )

      Tentei isso abaixo:
      $var_quantidades=$pdo->prepare("select count(categoria) as total from loja_virtual WHERE estoque=:estoque group by categoria" ); $var_quantidades->bindValue(":estoque",$estoque); $var_quantidades->execute(); Como eu faço esse código acima funcionar e como exibo as quantidade agrupadas?

      Se alguém puder me ajudar, Obrigado!
       
      Fábio.
       
    • Por srmacedo
      Gostaria de compartilhar com vocês uma biblioteca responsável por se comunicar com seu banco de dados.
      Acredito que a grande maioria tem problemas na hora de fazer o velho crud.
      Funções complexas Métodos grandes Excesso de bindValue Trabalho extra  
      Mais informações sobre a biblioteca estará no próprio readme.
      https://github.com/devmacedo/norme
       
       
      Prev:
      Para eu buscar um usuário de um id especifico basta eu usar:
      $user->find(1)  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.