Ir para conteúdo

POWERED BY:

Arquivado

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

Marcos Barbosa

[Resolvido] consultas dentro de IF´s no PDO

Recommended Posts

Pessoal, tenho um scrip feito em PDO, que testando local funciona, mas quando coloco no ar da erro:

SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.

 

O código é +- assim:

if (isset($_POST['enviar']) && $_POST['enviar'] == 'inserir' ){
  $sql1 = "SELECT * FROM tabela1 WHERE id = :id";

  try{

    $query1 = $conecta->prepare($sql1);
    $query1->bindValue(':imoveisId',$imoveisId,PDO::PARAM_STR);
    $query1->execute();

    $contar = $query1->rowCount(PDO::FETCH_ASSOC);


  }catch(PDOexecptio $e){
    echo $e;
  }  

  IF ($contar >= '2'){
    echo 'Já existem 2'
  } else {
      $sql_insert  = 'INSERT INTO tabela (valor1, valor2)';
      $sql_insert .= 'VALUES (:valor1, :valor2)';

      try {
    $query_insert = $conecta->prepare($sql_insert);
    $query_insert->bindValue(':valor1',$valor1,PDO::PARAM_STR);
    $query_insert->bindValue(':valor2',$valor2,PDO::PARAM_STR);
    $query_insert->execute();

    echo 'Cadastrado';

      } catch (PDOexception $erro){
    echo $erro->getMessage();
      }
  }

}

 

Alguém poderia me indicar como posso resolver isso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí..

 


<?php
  if (isset($_POST[Enviar])){
$clienteId= $_POST['clienteId'];
$sql = 'SELECT * FROM ms_clienteImagem WHERE  clienteId= :clienteId;

try{
    $queryd = $conecta->prepare($sql);
    $query->bindValue(':$clienteId',$$clienteId,PDO::PARAM_STR);
    $query->execute();

    $count = $query->rowCount();
} catch(PDOException $erro){
    echo $erro->getMessage();
}

if($count >= '2'){
   echo '<h1>Você já tem 2</h1>';
} else {
    $sql_insert  = 'INSERT INTO ms_clienteImagem (imagemId, nomeImagem)';
    $sql_insert .= 'VALUES (:imagemId, :nomeImagem)';

    try {
	$query_insert = $conecta->prepare($sql_insert);
	$query_insert->bindValue(':imagemId',$imagemId,PDO::PARAM_STR);
	$query_insert->bindValue(':nomeImagem',$nomeImagem,PDO::PARAM_STR);
	$query_insert->execute();

	echo 'Cadastrados com Sucesso!';
    } catch (PDOexception $erroImagem){
	echo $erroImagem->getMessage();
    }

}
    }
?>


<form name="cadastraClienteIMG" action="" method="post" enctype="multipart/form-data">
   <label>
      <span>Imagens: </span>
        <input type="file" name="img[]" size="60"/>
        </label>
     <input type="hidden" name="imoveisId" value="<?php echo $clienteId; ?>" />

           <input type="submit" name="enviar" id="enviar" value="Enviar" />
           <input type="submit" name="finalizar" id="finalizar" value="Finalizar" />
       </form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já fechei, devo ter apagado por engano, o erro é esse:

SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.

 

É +- isso: Não é possível execultar consultas, enquanto outras consultas unbuffered estão ativas.

 

Faltou fechar aspas aí:

$sql = 'SELECT * FROM ms_clienteImagem WHERE  clienteId= :clienteId';

Compartilhar este post


Link para o post
Compartilhar em outros sites

A verificação por maior ou igual a 2, e o conseguinte try...catch() do else, deveriam estar dentro do primeiro try {}

 

Só vai cair no primeiro catch() (lá embaixo) se no primeiro try alguma exceção for disparada. Se nenhuma for, a esxecução continua dentro dele mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz as devidas alterações, mas mesmo assim ele ainda dá o erro.

Vou estudar algo sobre PDO::MYSQL_ATTR_USE_BUFFERED_QUERY e sobre PDOStatement::fetchAll(). , pois são mencionados no erro.

 

O erro acontece no 2º try - catch, ele já entra direto no catch.

 

Se você´s tiverem mais alguma dica, ela será bem vinda.

 

A verificação por maior ou igual a 2, e o conseguinte try...catch() do else, deveriam estar dentro do primeiro try {}

 

Só vai cair no primeiro catch() (lá embaixo) se no primeiro try alguma exceção for disparada. Se nenhuma for, a esxecução continua dentro dele mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, depois de pesquisar bastante, achei uma explicação q fala +- o seguinte: O erro acontece pq quando fazendos consultas consecutivas como é o caso do meu exemplo acima, a conexão para novas consultas não está liberada, então precisamos fazer essa liberação usuando o cluseCursor(), maiores explicações no link: http://www.php.net/manual/en/pdostatement.closecursor.php.

 

Pessoal, vlw pela ajuda...

 

Pessoal, um problema foi resolvido, mas apareceu outro, o rowCount() parou de funcionar, alguém pode me dizer pq ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora está resolvido, fiz assim:

$sql_limitaUpload = 'SELECT * FROM ms_midias WHERE  imoveisId = :imoveisId';

			try{
				$query_limitaUpload = $conecta->prepare($sql_limitaUpload);
				$query_limitaUpload->bindValue(':imoveisId',$imoveisId,PDO::PARAM_STR);
				$query_limitaUpload->execute();

				$t = $query_limitaUpload->fetchAll();
				$c = count($t);

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.