Problem with MySQL and PHP query

2

I have the following problem, when I use the WHERE clause I am not able to use the values being passed by parameter.

As a return I get the following message:

  • PDOStatement :: execute (): SQLSTATE [HY093]: Invalid parameter number: number of bound variables does not match number of tokens in
TIPOS DE DADOS NO BANCO

date  tipo -> DATETIME
municipio tipo -> INT
entidade tipo -> INT


    public function listLicitacoesEntidadesCidades($date, $municipio, $entidade){       

        $stmt = $this->pdo->prepare("
        select 
        tab_licitacoes.id,
        tab_licitacoes.cidade_id,
        tab_licitacoes.entidade_id,
        tab_licitacoes.data_abertura,
        tab_licitacoes.data_cancelamento,
        tab_licitacoes.status,
        tab_licitacoes.modalidade,
        tab_cidades.nome,
        tab_entidades.nome_entidade
            from tab_licitacoes 
            join 
            tab_cidades on (tab_licitacoes.cidade_id = tab_cidades.id)
            join
            tab_entidades on (tab_licitacoes.entidade_id = tab_entidades.id) 
                where 
                tab_licitacoes.status = 'A'
                and
                tab_licitacoes.data_cancelamento >= :date
                and
                tab_licitacoes.cidade_id = :municipio
                and
                tab_licitacoes.entidade_id = :entidade

                ");
        $stmt->bindValue(':date', $date, PDO::PARAM_STR);
        $stmt->bindValue(':municipio', $municipio, PDO::PARAM_INT);
        $stmt->bindValue(':entidade', $entidade, PDO::PARAM_INT);
        $stmt->execute();

        $data = $stmt->fetchAll(PDO::FETCH_ASSOC);

        return $data;

    }
    
asked by anonymous 13.06.2016 / 18:58

1 answer

1

Based on what you reported in the comments, have you tried different?

This way:

 public function listLicitacoesEntidadesCidades($date, $municipio, $entidade){       

    $stmt = $this->pdo->prepare("
    select 
    tab_licitacoes.id,
    tab_licitacoes.cidade_id,
    tab_licitacoes.entidade_id,
    tab_licitacoes.data_abertura,
    tab_licitacoes.data_cancelamento,
    tab_licitacoes.status,
    tab_licitacoes.modalidade,
    tab_cidades.nome,
    tab_entidades.nome_entidade
        from tab_licitacoes 
        join 
        tab_cidades on (tab_licitacoes.cidade_id = tab_cidades.id)
        join
        tab_entidades on (tab_licitacoes.entidade_id = tab_entidades.id) 
            where 
            tab_licitacoes.status = 'A'
            and
            tab_licitacoes.data_cancelamento >= ?
            and
            tab_licitacoes.cidade_id = ?
            and
            tab_licitacoes.entidade_id = ?

            ");

    $stmt->execute(array(date("Y-m-d H:i:s", strtotime($date)), $municipio, $entidade));

    $data = $stmt->fetchAll(PDO::FETCH_ASSOC);

    return $data;

}
  

EDITED

At your method signature

public function listLicitacoesEntidadesCidades($date, $municipio, $entidade)

Your $date parameter is of type DATETIME ?

When you assign the value to the query parameter

$stmt->bindValue(':date', $date, PDO::PARAM_STR);

You set the parameter to string in PDO::PARAM_STR , so you should convert $ date to string .

$stmt->bindValue(':date', date("Y-m-d H:i:s", strtotime($date)), PDO::PARAM_STR);

Would that be?

    
13.06.2016 / 21:08