Ir para conteúdo

POWERED BY:

Arquivado

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

matusaires3

Erro PDO

Recommended Posts

Ao fazer o filtro ocorre esse erro , quando removo as condições que coloquei filtra normal

  1. dados: []
  2. erro: "SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens"
  3. total: 0
<?php
/**
*	SAS/Mateusaires
*	mateusaires@brisanet.com.br
*	Build:20152109
**/
session_start();
$sessao = unserialize($_SESSION['SESSION_USUARIO']);
if($sessao == 1){
					echo 'DEU ERRO';
				}
				else
				{
					$responsavel = $sessao['nome']; //nome do usuario da sessao.
					$id_super = $sessao['id']; //nome do usuario da sessao.
				}
if($_POST){
	try {
		require('../../autoLoad.php');
		$buscar = new Buscar();
		$tabela = 't_erros_cobranca';
		
		if( isset($_POST['action']) AND $_POST['action'] == 'GET_VALUES' ){
		
			$pdo = $connection->prepare("
				SELECT * 
				FROM t_erros_cobranca
				WHERE id=:id
			");
			
			$pdo->bindParam(':id', $_POST['id']);
			$pdo->execute();
		
			$linhas = $pdo->fetch(PDO::FETCH_OBJ);
			echo json_encode( array('success'=>true, 'dados'=>$linhas) );
		}
	
		else{
			$pag = new Paginar($_POST);
			
			$page 	= $pag->getPage();
			$start	= $pag->getStart();
			$limit	= $pag->getLimit();
			$sort 	= $pag->getSort();
			$order 	= $pag->getOrder();
			
			$result = array();
			
			if(isset($_POST['action']) AND $_POST['action'] == 'FILTER'){
				$buscar->setBusca(array('Cod_Contrato', 't_erros_cobranca.Cod_Contrato'), $_POST['Cod_Contrato'], 'like');
				$buscar->setBusca(array('Cliente', 't_erros_cobranca.Cliente'), $_POST['Cliente'], 'like');
				$buscar->setBusca(array('Cidade', 't_erros_cobranca.Cidade'), $_POST['Cidade'], 'like');
				$buscar->setBusca(array('Identificado_por', 't_erros_cobranca.Identificado_por'), $_POST['Identificado_por'], 'like');
				$buscar->setBusca(array('Responsavel', 't_erros_cobranca.Responsavel'), $_POST['Responsavel'], 'like');
				$buscar->setBusca(array('Data', 't_erros_cobranca.Data'), $_POST['Data'], 'like');
				$buscar->setBusca(array('Descricao_Erro', 't_erros_cobranca.Descricao_Erro'), $_POST['Descricao_Erro'], 'like');
				$buscar->setBusca(array('Status', 't_erros_cobranca.Status'), $_POST['Status'], 'like');
				$buscar->setBusca(array('Mes', 't_erros_cobranca.Mes'), $_POST['Mes'], 'like');
				$buscar->setBusca(array('Ano', 't_erros_cobranca.Ano'), $_POST['Ano'], 'like');
			}
			
			if (isset($_POST['sort']))
			{
				$sortJson = json_decode( $_POST['sort'] );
				$sort = trim(rtrim(addslashes($sortJson[0]->property )));
				$order = trim(rtrim(addslashes( $sortJson[0]->direction )));
			}
			
			$filtro = $buscar->getSql();
			
			$pdo = $connection->prepare("
				SELECT count(*) as total 
				FROM t_erros_cobranca 
				{$filtro};
			");
			$pdo->execute( $buscar->getArrayExecute() );
			
			$query = $pdo->fetch(PDO::FETCH_OBJ);
			
			$countRow = $query->total;
			
			$pdo = $connection->prepare("
				SELECT t_erros_cobranca.* 
				FROM t_erros_cobranca 
				WHERE :id_super = 106 || Responsavel =:responsavel
				{$filtro} 
				ORDER BY {$sort} {$order} 
				LIMIT {$start}, {$limit};
			");
			$pdo->bindParam(':responsavel', $responsavel);
			$pdo->bindParam(':id_super', $id_super);
			$pdo->execute( $buscar->getArrayExecute() );
			
			$query = $pdo->fetchAll(PDO::FETCH_OBJ);
			
			$result["total"] = $countRow;
			$result["dados"] = $query;
			
			echo json_encode($result);
		}
	} 
	catch (PDOException $e) {
		echo json_encode(array('dados'=>array(),'total'=>0, 'erro'=>$e->getMessage()));
	}	
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse erro é porque o número de named ou question mark placeholders é diferente da quantidade de items no array que você informou à PDOStatement::execute() OU "pendurou" com PDOSTatement::bindParam().

Porém, no execute(), lá embaixo, você insere um array contendo N valores, tantos quantos necessários. Os ídices desse array serão os nomes que você definiu lá em cima, no prepare(), e os valores, as variáveis que estava usando no bindParam():

Mas a grande sacada de não se usar bindValue() é por causa do terceiro argumento dométodo,no qual você define manualmente o tipo. Pelo array essa detecção é automática, evitando que você trate alguma coisa da forma errada. tente usar quando for numera bindValue. Conhecimento do nosso amigo

Bruno Augusto

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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