Questão
ID 2685047Disciplina: Tecnologia da Informação
Assunto: Injeção SQL
Ano: 2016 Banca: PUC PR - Pontifícia Universidade Católica do Paraná Órgão: Rádio e Televisão Educativa do Paraná
O código-fonte a seguir utiliza-se da extensão PDO (PHP Data Objects) para acessar e consultar uma base de dados em MySQL.
<?php
try {
\$dbh = new PDO('mysql:host=localhost;dbname=sistema', 'root', '');
\$perfil = \$_GET['perfil'];
\$status = \$_GET['status'];
\$stmt = \$dbh->prepare("SELECT * FROM users WHERE perfil = ? AND status = ?");
\$stmt->bindParam(1, \$perfil, PDO::PARAM_INT);
\$stmt->bindParam(2, \$status, PDO::PARAM_STR);
\$stmt->execute();
foreach(\$stmt->fetchAll() as \$user) {
print_r(\$user);
}
} catch (PDOException \$e) {
die("Erro ao conectar: " . \$e->getMessage() . "<br/>");
}
?>
Sobre as funcionalidades do PDO utilizadas, analise as afirmações a seguir:
I. A utilização do método prepare() inviabiliza ataques via SQL Injection à consulta definida.
II. O comando \$stmt->execute() poderia ser substituído por \$stmt->query().
III. É possível utilizar também a interface procedural do PDO e não apenas a interface orientada a objetos.
IV. Para conectar a uma base de dados diferente do MySQL, basta alterar o DSN passado para o construtor da classe PDO.
É CORRETO o que se afirma em: