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 PREPARE
declaraçã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 aPREPARE
palavra-chave. - Segundo, forneça à instrução SQL espaços reservados (
?
) (preparable_stmt
) após aFROM
palavra-chave. Opreparable_stmt
representa 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 EXECUTE
instruçã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 PREPARE
instruçã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 PREPARE
palavra-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:
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 -p
Linguagem 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 users
tabela:
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 username
e 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_user
com os parâmetros @username
e @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 username
e email
e 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
PREPARE
declaraçã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.