Olá, Tiago, tudo bem?
Geralmente utilizamos o método query
quando não desejamos passar argumentos para uma instrução SQL, em outras palavras esta consulta SQL é executada imediatamente.
O exemplo abaixo foi realizado pelo Vinicius na aula, e o objetivo dessa instrução é apenas buscar no banco de dados todos os vídeos, ou seja, essa é uma SQL definida de forma fixa, ela não precisa de tratamento, modificação e mudança durante a execução.
$con->query('SELECT * FROM videos;')->fetchAll(PDO::FETCH_ASSOC);
Entretanto, imagine que surgiu a necessidade de nós buscarmos as informações de apenas 1 video, para isso nós devemos passar como argumento o id do video que desejamos as informações.
Para este caso, se deparamos com uma instrução SQL dinâmica, que são construídas em tempo de execução, ou seja, precisamos que o usuário informe qual video ele deseja, e essa informação, geralmente vem de formulários. Porém, como essa é uma informação que vem do usuário, devemos tomar cuidado para evitar problemas de segurança como o SQL Injection.
E para evitar este tipo de falha de segurança utilizaremos o método prepare
que inclui e relaciona um ou mais parâmetros na instrução SQL através do caractere de ponto de interrogação (?)
, conforme o exemplo a seguir:
$id = 5; // imagine que este valor veio de um formulário
$sql = "SELECT * FROM videos WHERE id = ?";
$statement = $pdo->prepare($sql);
$statement->bindValue(1,$id);
$statement->execute();
$result = $statement->fetch(PDO::FETCH_ASSOC);
Quando a gente utiliza o método bindValue
, por baixo dos panos, será realizado diversas verificações no conteúdo da variável $id
, para que ela não cause danos no nosso sistema, e só podemos utilizar esse método bindValue
através do método prepare
.
Recapitulando:
query
: Usaremos em instruções SQL estáticas, ou seja, quando não precisamos passar algum argumento para a instrução.prepare
: Usaremos em instruções SQL dinâmicas, ou seja, quando precisarmos passar algum argumento para a instrução.
Para auxiliar no seu aprendizado você pode fazer o curso de PHP e PDO:
Espero ter ajudado, Bons estudos =)
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓