Ir para conteúdo

POWERED BY:

Arquivado

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

jdsdias

Cakephp consulta retorna sempre -1

Recommended Posts

Estou desenvolvendo uma aplicação utilizando o cakephp 3.0.

 

O problema ocorre porque tem uma consulta SELECT que retorna, na função rowCount do pdo, sempre -1. Então o cake dá um erro,

 

porque a consulta não pode retornar valor menor do que zero.

array size cannot be less than zero

O banco de dados que estou utilizando é o SQL Server 2008.

 

Fiz um pequeno teste, utilizando somente o PDO, e verifiquei que o retorno do rowCount no pdo, nesse banco, está sempre retornando -1.

 

Segue o exemplo:

$conn = new PDO("dblib:host={HOST};dbname={DB}","{USER}","{PASSWORD}");
$sql = "select * from pessoas";
$stmt = $conn->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$stmt->execute();
echo $stmt->rowCount(); // return -1

Esse mesmo código, usando o banco de dados MySQL, traz como resultado o número de linhas da consulta, já executando com o SQL Server

 

o retorno sempre é -1. Li em alguns fóruns para utilizar a função count do php sobre o fetch da consulta. Mas essa solução não iria

 

funcionar pois estou utilizando o cake como framework e ele utiliza internamente a função rowCount.

 

Alguém já passou por algum problema parecido e poderia me orientar se existe alguma solução para esse caso?

 

obs: o cake utiliza o driver sqlsrv ao invés do dblib mas nos dois ocorre o mesmo problema

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é bem um bug com a dblib, simplesmente algumas bibliotecas não tem esse suporte/funcionalidade.

 

Citar

If the last SQL statement executed by the associated PDOStatement was a SELECT statement, some databases may return the number of rows returned by that statement. However, this behaviour is not guaranteed for all databases and should not be relied on for portable applications.

 

 

Estranho é o CakePHP utilizar dessa forma e ignorar as diferenças entre drivers.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá o cake utiliza por padrão o driver sqlsrv, como estou rodando a aplicação em um linux, tive que alterar a classe para utilizar a dblib, pois já usava ela em outras aplicações. Ocorre que não tem como usar a sqlsrv no meu ambiente de produção, pelo menos por enquanto, pois a Microsoft não oferece o driver sqlsrv para o php 5.6, somente 7.0+.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, já passei pelo mesmo problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por Luiz Henrique
      Olá,
       
      Preciso fazer uma inserção no DB de registros referente a pagamentos, quando for no crédito será realizado o insert com sua respectiva data de compensação e valor da parcela exemplo:
       3 parcelas de 100.00 e cada registro em seu devido mês:
      INSERT INTO tabela (valor, data) VALUES (100, 2022-08-17),(100, 2022-09-17),(100, 2022-10-17) É mais eficiente fazer da forma acima ou colocar 3 INSERT?
      Ou existe forma melhor de fazer isso?
       
      Obrigado.,
       
    • Por Marcones Borges
      Olá, estou precisando de uma ajuda...
       
      Tenho duas tabelas
      ministros
      entradas
       
      Preciso exibir a lista dos ministros que não contam no relatório gerado em entradas.
       
      Fiz assim a combinação.
       

      $sql = "SELECT ministro.id, ministro.area, entrada.beneficiario, entrada.id_benificiario, entrada.id_benificiario, entrada.tipo_lancamento FROM ministro INNER JOIN entrada ON ministro.id = entrada.id_benificiario WHERE ministro.area = entrada.area_beneficiario AND ministro.nome = entrada.beneficiario AND entrada.id_benificiario='[{$id_exer}' AND entrada.tipo_lancamento='ministro'  "; $stm = $conexao->prepare($sql); $stm->execute(); $clientes = $stm->fetchAll(PDO::FETCH_OBJ);
       
      Fiz as combinações direitinho mais não consigui exbir os que estão na tabela ministro e não estão na tabela entrada.
    • Por Marcones Borges
      Olá, sou iniciante em php, estou tentando migrar um código de php 5.6 para pdo mais da erro, não roda....
      Alguém pode me ajudar?

      include '../Connections/functions.php';           function montaSelect()         {  $sql = "SELECT * FROM membros"; $result = $con->query($sql); if ($result->num_rows > 0 )  {   while($dados = $result->fetch_assoc())   {   $opt .= '<option value="'.$dados['id'].'">'.$dados['nome'].'</option>';   } } else {           $opt = '<option value="0">Nenhum Membro cadastrado</option>';     return $opt; }         }
       
      Este era o código original:
       

      // require 'topof.php'; // echo $usuario;         /**          * função que retorna o select          */         function montaSelect()         {                 $sql = "SELECT id, nome FROM membros '";                 $query = mysql_query( $sql );                 if( mysql_num_rows( $query ) > 0 )                 {                         while( $dados = mysql_fetch_assoc( $query ) )                         {                                 $opt .= '<option value="'.$dados['id'].'">'.$dados['nome'].'</option>';                         }                 }                 else                         $opt = '<option value="0">Nenhum Membro cadastrado</option>';                 return $opt;         }
    • Por tanaka_
      Gostaria de saber se é possível listar todos os objetos criados no banco de dados por usuário especifico.
      Não é para listar os "dbo" e sim o usuário logado que criou o objeto.
       
      Usuário logado:
      select SYSTEM_USER
       
      Todos os objetos criados:
      select * from sys.all_objects
×

Informação importante

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