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:
- $st->execute([$Usuario->User, $Usuario->Password])
- $st->exec([$Usuario.getUser(),$Usuario.getPassword()])
- $c->execute([$st -> getUser($Usuario), $st -> getPassword($Usuario))
- $st->exec([$Usuario->getUser(),$Usuario ->getPassword()])
- $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