Aspas no MySQL: simples, duplas e backticks – guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que as aspas no MySQL são tão confusas?

\n\n

Se você já escreveu consultas SQL em PHP, com certeza já se perguntou: quando usar aspas simples (' '), quando usar aspas duplas (" ") e quando usar aqueles misteriosos backticks (` `)? Um único caractere errado e, em vez dos dados esperados, você recebe um erro de sintaxe no MySQL ou, pior ainda, uma brecha de segurança.

\n\n

Este é um dos tópicos mais populares no Stack Overflow (mais de 2 milhões de visualizações!). E não é à toa. Até desenvolvedores experientes às vezes se confundem. Hoje, vamos esclarecer tudo de uma vez por todas. Você vai aprender:

\n\n
    \n
  • A função de cada tipo de aspas no MySQL
  • \n
  • Como escapar dados corretamente em PHP
  • \n
  • Por que as aspas duplas são quase sempre uma má ideia
  • \n
  • Como se proteger contra SQL injection
  • \n
\n\n

Vamos nessa! 🚀

\n\n

Anatomia de uma consulta MySQL: três tipos de aspas

\n\n

No MySQL, existem três símbolos diferentes que se parecem com aspas, mas têm funções completamente distintas:

\n\n

1. Aspas simples (' ') — para valores de string

\n\n

Quando usar: sempre que você estiver passando uma string (texto, data, email, senha).

\n\n
SELECT * FROM usuarios WHERE nome = 'João';\nINSERT INTO artigos (titulo) VALUES ('MySQL para iniciantes');
\n\n

O MySQL interpreta tudo que está dentro de aspas simples como um literal de string. Isso significa que você está dizendo ao banco: "Aqui tenho um valor, não tente interpretar isso como nome de coluna ou comando".

\n\n

2. Aspas duplas (" ") — quase a mesma coisa, mas com uma diferença

\n\n

No SQL padrão, aspas duplas são usadas para identificadores (nomes de tabelas e colunas). Mas o MySQL, por padrão, opera em um modo onde as aspas duplas são equivalentes às aspas simples. Isso geralmente causa confusão.

\n\n
-- Isso funciona, mas é melhor evitar\nSELECT * FROM usuarios WHERE nome = "Maria";
\n\n

Problema: se você ativar o modo estrito ANSI_QUOTES, as aspas duplas passarão a funcionar como backticks. Seu código vai quebrar. Portanto:

\n\n

Regra nº 1: Use aspas simples para strings. Sempre. Aspas duplas só se você souber exatamente o que está fazendo ou para compatibilidade com outros SGBDs.

\n\n

3. Backticks (` `) — para nomes de tabelas e colunas

\n\n

Backticks (crases) são identificadores. Eles são necessários para:

\n\n
    \n
  • Usar palavras reservadas como nomes (má prática, mas acontece)
  • \n
  • Trabalhar com nomes que contêm espaços ou caracteres especiais
  • \n
  • Evitar conflitos com palavras-chave do MySQL
  • \n
\n\n
-- Ruim: 'select' é uma palavra reservada\nSELECT * FROM select;\n\n-- Bom: escapando com backticks\nSELECT * FROM `select`;\n\n-- Obrigatório: nome com espaço\nSELECT `nome usuario` FROM usuarios;\n\n-- Recomendado: sempre escapar nomes de tabelas e colunas\nSELECT `id`, `nome` FROM `usuarios` WHERE `status` = 'ativo';
\n\n

Importante: backticks NÃO podem ser usados para valores. Isso causará um erro.

\n\n
-- ERRO: o MySQL vai achar que 'João' é um nome de coluna\nSELECT * FROM usuarios WHERE nome = `João`;
\n\n

PHP + MySQL: como não se confundir com as aspas

\n\n

Agora a parte mais interessante — como tudo isso funciona no PHP. O PHP também usa aspas simples e duplas para strings, e é fácil cometer erros.

\n\n

Caso nº 1: Inserção direta de variável (perigoso!)

\n\n
// RUIM: vulnerável a SQL injection\n$nome = "João'; DROP TABLE usuarios; --";\n$query = "SELECT * FROM usuarios WHERE nome = '$nome'";\n// Resultado: SELECT * FROM usuarios WHERE nome = 'João'; DROP TABLE usuarios; --'
\n\n

Este é o clássico SQL injection. Nunca faça isso!

\n\n

Caso nº 2: Escapando com mysqli_real_escape_string (melhor, mas não ideal)

\n

Blogs

Book Recommendations