Declaração preparada do MySQL

Resumo : neste tutorial, você aprenderá como usar a instrução preparada do MySQL para fazer com que suas consultas sejam executadas com mais segurança e rapidez.

Introdução à declaração preparada do MySQL

As instruções preparadas do MySQL são um recurso que ajuda a aprimorar a segurança e o desempenho das consultas ao banco de dados.

As instruções preparadas do MySQL permitem que você escreva consultas SQL com espaços reservados para parâmetros e, em seguida, vincule valores a esses parâmetros em tempo de execução. Eles podem ajudar a prevenir ataques de injeção de SQL e otimizar a execução de consultas.

A sintaxe das instruções preparadas é baseada em três instruções:

  • PREPARE
  • EXECUTE
  • DEALLOCATE PREPARE

Declaração PREPARAR

A PREPAREdeclaração prepara uma declaração para execução:

PREPARE stmt_name FROM preparable_stmt;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta sintaxe:

  • Primeiro, especifique o nome da instrução preparada ( stmt_name) após a PREPAREpalavra-chave.
  • Segundo, forneça à instrução SQL espaços reservados ( ?) ( preparable_stmt) após a FROMpalavra-chave. O preparable_stmtrepresenta uma única instrução SQL, não várias instruções.

O preparable_stmté enviado ao servidor MySQL com espaços reservados ( ?) para parâmetros. Ao receber a instrução, o servidor MySQL analisa, otimiza e pré-compila a consulta e, em seguida, cria a instrução preparada.

Depois de criar uma instrução preparada, você precisa inicializar um conjunto de variáveis ​​de usuário para fornecer valores para os espaços reservados de parâmetro (?) especificados na instrução preparada:

SET @var_name1 = value1;
SET @var_name2 = value2;Linguagem de código:  CSS  ( css )

Instrução EXECUTAR

A EXECUTEinstrução executa a instrução preparada com os valores reais:

EXECUTE stmt_name [USING @var_name [, @var_name] ...];Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Se a instrução preparada contiver algum marcador de parâmetro (?), será necessário fornecer as variáveis ​​do usuário contendo valores para esses parâmetros.

Observe que você pode usar apenas variáveis ​​de usuário como valores para os parâmetros.

Você pode executar a mesma instrução preparada quantas vezes quiser, cada vez, você pode definir as variáveis ​​com valores diferentes antes de cada execução.

Instrução DEALLOCATE PREPARE

A DEALLOCATE PREPAREinstrução libera o recurso associado à instrução preparada:

{DEALLOCATE | DROP} PREPARE stmt_name;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta instrução, você especifica o nome da instrução preparada após a PREPAREpalavra-chave.

Se você criar muitas instruções preparadas e não desalocá-las, poderá encontrar o limite superior controlado pela  max_prepared_stmt_count variável do sistema.

A imagem a seguir ilustra como usar uma declaração preparada:

Declaração preparada do MySQL

Exemplo básico de instrução preparada para MySQL

1) Configurando uma tabela de amostra

Primeiro, abra o prompt de comando no Windows ou Terminal em sistemas do tipo Unix e conecte-se ao servidor MySQL:

mysql -u root -pLinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Segundo, crie um novo banco de dados chamado mydb:

create database mydb;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Terceiro, altere o banco de dados atual para mydb:

use mydb;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Por fim, crie uma nova tabela chamada users:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL UNIQUE
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

2) Usando a instrução preparada do MySQL para inserir dados na tabela de usuários

Primeiro, crie uma instrução preparada que insira uma nova linha na userstabela:

PREPARE insert_user FROM 'INSERT INTO users (username, email) VALUES (?, ?)';Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Segundo, defina os valores para os parâmetros usernamee email:

SET @username = 'john_doe';
SET @email = '[email protected]';Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Terceiro, execute a instrução preparada insert_usercom os parâmetros @usernamee @email:

EXECUTE insert_user USING @username, @email;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Quarto, defina os valores para os parâmetros usernamee emaile execute a instrução preparada novamente. Desta vez, o MySQL usará a instrução pré-compilada:

SET @username = 'jane_doe';
SET @email = '[email protected]';
EXECUTE insert_user USING @username, @email;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Quinto, verifique os resultados:

SELECT * FROM users;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----+----------+------------------+
| id | username | email            |
+----+----------+------------------+
|  1 | john_doe | [email protected] |
|  2 | jane_doe | [email protected] |
+----+----------+------------------+
2 rows in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Quinto, libere o recurso da declaração preparada usando a DEALLOCATE PREPAREdeclaração:

DEALLOCATE PREPARE insert_user;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Resumo

  • Use instruções preparadas pelo MySQL para aprimorar a segurança e o desempenho das consultas ao banco de dados.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *