Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Uso das funções query e prepare

Olá, não ficou claro pra mim qual é a diferença do uso das funções query e prepare, como nos exemplos abaixo trabalhados em aula:

public function exibirTodos(): array
    {

        $resultado = $this->mysql->query('SELECT id, titulo, conteudo FROM artigos');
        $artigos = $resultado->fetch_all(MYSQLI_ASSOC);

        return $artigos;
    }

public function encontrarPorId(string $id): array
    {
        $selecionaArtigo = $this->mysql->prepare("SELECT id, titulo, conteudo FROM artigos WHERE id = ?");
        $selecionaArtigo->bind_param('s', $id);
        $selecionaArtigo->execute();
        $artigo = $selecionaArtigo->get_result()->fetch_assoc();
        return $artigo;
    }

Inicialmente havia entendido que query seria para consultas e prepare para inserção, alteração e exclusão de dados no banco.

1 resposta
solução!

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 ✓

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software