Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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 problemaAcabei refazendo um teste com a sqlsrv e o resultado foi retornado de acordo com o esperando, acredito que seja um bug no driver dblib
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.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+.
Sim, já passei pelo mesmo problema.
Para complementar a versão do cakephp que estou usando é a 3.3.6, o php estou usando na versão 5.6.31
Alguém já passou por um problema parecido?