FC ConcursosFC Concursos

Questão FC373380

Considere a função abaixo, existente em uma classe PHP de acesso a dados: public function localizar($Usuario) { try { $c = new PDO("mysql:host=localhost;dbname=dados", "root", "");

Desenvolvimento Web

FCC · 2020

Considere a função abaixo, existente em uma classe PHP de acesso a dados:

 

public function localizar($Usuario) {

  try {

   $c = new PDO("mysql:host=localhost;dbname=dados", "root", "");

   $c->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

   $st = $c->prepare("SELECT * FROM Colaborador WHERE user=? AND password=?");

   ...I... ;

   /*restante do código aqui */

  } catch (PDOException $ex) {

   return null;

  }

}

 

Considerando que $Usuario é um objeto da classe Usuario, que possui os atributos User e Password e os respectivos métodos getter e setter, para executar a instrução SQL INSERT, a lacuna I acima deve ser preenchida corretamente com:

  1. $st->execute([$Usuario->User, $Usuario->Password])
  2. $st->exec([$Usuario.getUser(),$Usuario.getPassword()])
  3. $c->execute([$st -> getUser($Usuario), $st -> getPassword($Usuario))
  4. $st->exec([$Usuario->getUser(),$Usuario ->getPassword()])
  5. $c->$st->execute([$Usuario(User), $Usuario(Password)])
Mostrar resposta e comentário

Gabarito

A

Comentário do professor

A linha $st->execute([$Usuario->User, $Usuario->Password]) completa corretamente o fluxo porque executa a instrução preparada pelo PDO::prepare e fornece os valores para os parâmetros posicionais representados pelos sinais ?.

Ao usar execute com um array, cada elemento do array é associado, na ordem, a um marcador posicional da query. Assim, o primeiro item corresponderá ao primeiro ? (user) e o segundo ao segundo ? (password).

Os valores obtidos do objeto $Usuario são passados diretamente; se a classe tiver getters, poderia-se usar $Usuario->getUser() e $Usuario->getPassword(). O importante é manter a ordem dos parâmetros.

Além de simplificar a ligação de valores, o uso de statements preparados com PDO reduz risco de injeção SQL e permite tratamento uniforme de tipos. O método execute retorna booleano indicando sucesso, e em seguida é possível usar fetch()/fetchAll() para ler resultados.

Conteúdo do catálogo FC Concursos · Atualizado em

Continue aprendendo