Pular para o conteúdo principal

Questão de Programação — Linguagens de programação — VUNESP 2025

ProgramaçãoLinguagens de programação
Código
vu111242
Banca
VUNESP
Órgão
UNESP
Ano
2025
Nível
Superior
Cargo
V - - Analista de Informática II - Área de Atuação: Redes e Infraestrutura - Edital nº 144

Observe o trecho de código PHP apresentado a seguir, utilizando PDO (PHP Data Objects)



Imagem associada para resolução da questão



Após a execução da query SQL, uma maneira de exibir a quantidade de linhas deletadas da tabela é digitando a linha de código: 


  1. Aecho $dbh->prepare(‘DELETE FROM users’)->rowCount ( );
  2. Becho $dbh->rowCount ( );
  3. Cecho $query->rowCount ( );
  4. Decho rowCount ($dbh) ;
  5. Eecho rowCount ($query);
Revelar gabarito e comentário

GabaritoC — echo $query->rowCount ( );

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

PDO: contando linhas afetadas por uma query

Gabarito: letra C. No PHP com PDO, o método rowCount() é chamado sobre o objeto que representa a query executada — no caso, $query — e retorna o número de linhas afetadas pela operação (DELETE, INSERT, UPDATE). É exatamente isso que a alternativa C faz: echo $query->rowCount();.

O PDO (PHP Data Objects) é uma extensão do PHP que fornece uma interface uniforme para acesso a bancos de dados. Quando você prepara e executa uma query, o objeto retornado por prepare() (ou query()) é um PDOStatement. É esse objeto que carrega as informações sobre a execução, incluindo quantas linhas foram afetadas. O método rowCount() é um método da classe PDOStatement, não da conexão PDO nem uma função global.

Vamos entender o fluxo típico:

  1. Conexão: $dbh = new PDO(...) — cria o objeto de conexão.

  2. Preparação: $query = $dbh->prepare('DELETE FROM users') — prepara a declaração SQL e retorna um PDOStatement.

  3. Execução: $query->execute() — executa a query.

  4. Resultado: $query->rowCount() — retorna o número de linhas afetadas.

A pegadinha aqui é que muitos candidatos confundem o objeto da conexão ($dbh) com o objeto da query ($query). O rowCount() não é um método da conexão, mas sim do statement. Também não é uma função global — é um método de objeto.

Vamos analisar cada alternativa:

  1. 1Conexão: $dbh = new PDO()
  2. 2Preparação: $query = $dbh->prepare()
  3. 3Execução: $query->execute()
  4. 4Resultado: $query->rowCount()
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

A alternativa A tenta chamar rowCount() diretamente no resultado de prepare(), sem armazenar o statement em uma variável. Embora prepare() retorne um PDOStatement, o código $dbh->prepare('DELETE FROM users')->rowCount() não executa a query — apenas a prepara. Para obter o número de linhas afetadas, é necessário executar a query com execute() antes de chamar rowCount(). Além disso, a sintaxe está incorreta: prepare() retorna um objeto, mas a chamada encadeada sem execute() não produz o resultado esperado. O erro específico é a falta de execução e a tentativa de usar rowCount() sem armazenar o statement.

Alternativa B — ❌ Incorreta

A alternativa B chama rowCount() diretamente no objeto de conexão $dbh. Isso está errado porque rowCount() é um método da classe PDOStatement, não da classe PDO. O objeto PDO representa a conexão com o banco de dados, não uma query específica. Portanto, $dbh->rowCount() não existe e resultaria em um erro fatal. O conceito confundido aqui é a diferença entre o objeto de conexão e o objeto de statement.

Alternativa C — ✅ Correta ⟵ GABARITO

A alternativa C está correta porque $query é o objeto PDOStatement retornado por prepare(). Após executar a query com $query->execute(), o método rowCount() retorna o número de linhas afetadas pela operação DELETE. O código echo $query->rowCount(); exibe exatamente esse valor. Esta é a maneira correta de obter a quantidade de linhas deletadas.

Alternativa D — ❌ Incorreta

A alternativa D tenta chamar rowCount() como uma função global, passando $dbh como argumento: rowCount($dbh). Isso está errado porque rowCount() é um método de objeto, não uma função autônoma. No PHP, não existe uma função global chamada rowCount(). O correto é chamar o método sobre o objeto PDOStatement. O erro específico é tratar um método como função.

Alternativa E — ❌ Incorreta

A alternativa E também tenta chamar rowCount() como uma função global, mas passando $query como argumento: rowCount($query). Assim como na alternativa D, isso está errado porque rowCount() é um método de objeto, não uma função global. Mesmo que $query seja o objeto correto, a sintaxe está incorreta. O correto seria $query->rowCount(). O erro específico é novamente tratar um método como função.

NÃO CAIA NESSA!

A banca explora a confusão entre o objeto de conexão ($dbh) e o objeto de statement ($query). Muitos candidatos lembram que rowCount() existe, mas não lembram em qual objeto chamá-lo. A pegadinha está em oferecer alternativas que usam $dbh (conexão) ou que tratam rowCount() como função global. Lembre-se: rowCount() é um método do PDOStatement, não da conexão nem uma função solta.

PEGA ESSA DICA!

Para fixar, lembre-se do fluxo: $dbh = new PDO(...)$query = $dbh->prepare(...)$query->execute()$query->rowCount(). O rowCount() sempre é chamado no objeto que representa a query preparada e executada. Se a alternativa usar $dbh->rowCount() ou rowCount($dbh), está errada. Se usar $query->rowCount() sem execute(), também está errada. A ordem importa!

Gabarito: letra C

Link permanente: /questoes/vu111242