Olá, tudo bem?
Geralmente utilizamos o método query
quando não desejamos passar argumentos para uma instrução SQL.
Veja que no exemplo realizado na aula, foi feito apenas uma simples busca ao banco de dados, ou seja, essa é uma instrução SQL estática, que não muda no tempo de execução, sempre irá nos retornar todos os artigos.
$resultado = $this->mysql->query('SELECT id, titulo, conteudo FROM artigos');
Entretanto, surgiu a necessidade de nós buscarmos as informações de apenas 1 artigo, para isso nós devemos passar como argumento o artigo que desejamos 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 artigo ele deseja, e estamos capturando essa informação através do $_GET['id']
. 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:
$selecionaArtigo = $this->mysql->prepare("SELECT id, titulo, conteudo FROM artigos WHERE id = ?");
$selecionaArtigo->bind_param('s', $id);
$selecionaArtigo->execute();
Quando a gente utiliza o método bind_param, 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 bind_param através do método prepare
.
Recaptulando:
query
: Usaremos em instruções SQL estáticas, ou seja, quando não precisarmos 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.
Espero ter ajudado, Bons estudos =)
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓