Pergunta

Eu comecei recentemente a trabalhar em um novo projeto usando PHP5 e quer usar suas aulas DOP para ele. O problema é que o driver MySQL DOP não suporta rowCount () então não há nenhuma maneira de executar uma consulta e, em seguida, obter o número de linhas afetadas, ou linhas retornadas, que é um muito grande problema, tanto quanto eu estou preocupado. Eu queria saber se alguém tem lidado com isso antes e o que você fez para trabalhar em torno dele. Ter que fazer um fetch () ou fetchAll () para verificar se quaisquer linhas foram afetadas ou devolvidos parece ser um hack para mim, eu prefiro apenas fazer $ stmt-> numRows () ou algo similar.

Foi útil?

Solução

Você pode emitir um direito de consulta SELECT FOUND_ROWS() após a consulta SELECT original para obter contagem de linhas.

$pdo->query("SELECT * FROM users");
$foundRows = $pdo->query("SELECT FOUND_ROWS()")->fetchColumn();

Veja também: MySQL Docs on FOUND_ROWS ( )

Outras dicas

Para aqueles de vocês que estão usando procedimentos MySQL armazenados, esta solução não é realmente viável. O que eu sugiro que você fazer é ter seu procedimento armazenado criar dois conjuntos de linhas. O primeiro irá conter uma fileira e uma coluna, contendo o número de registos. O segundo será o conjunto de registros que você irá usar para buscar esse número de linhas.

O número de linhas ilimitadas pode ser um SELECT COUNT(*) com exatamente a mesma cláusula WHERE como o segundo conjunto de linhas sem as cláusulas LIMIT / OFFSET.

Outra idéia poderia ser a criação de uma tabela temporária. Use sua declaração SELECT para preencher a tabela temporária. Então você pode usar SELECT COUNT(*) FROM tmpTable para o seu primeiro conjunto de linhas e SELECT * FROM tmpTable para o seu segundo.

Esta questão é baseada em várias suposições falsas e uma declaração desatualizado.

Em primeiro lugar, fazer número não confundir de afetadas e selecionados linhas. DOP apoiou o ex-mesmo de volta em '09.

Falando de número de linhas retornadas pela instrução SELECT - você simplesmente não precisa desse número. Os dados que você tem é suficiente.

E sim, suportes hoje rowCount() número de linhas selecionadas a partir do MySQL também. Mas novamente - você não precisa esse número em uma aplicação web média de qualquer maneira

.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top