“`html
Erros comuns em PHP que você deve evitar
Se você quer código mais estável, seguro e fácil de manter, evite os deslizes que aparecem em projetos reais:
produção quebrando, dados inconsistentes e falhas difíceis de rastrear.
1 Validar e tipar: pare de confiar no “vai dar certo”
Um dos maiores geradores de bug em PHP é a suposição de que os dados sempre vêm no formato esperado.
Quando você mistura string, null, números vindos de query string e payloads malformados,
o resultado aparece tarde: comportamento inconsistente, warnings que viram falhas e dados corrompidos.
O que evitar
Comparações frouxas, casting silencioso e ausência de validação em bordas.
O que fazer
Valide entrada cedo, use tipos/assinaturas e rejeite dados inválidos.
- Não use comparações frouxas quando o tipo importa. Prefira
===em vez de==. - Evite operar com
nullsem intenção. Se for obrigatório, trate antes (retorne erro HTTP/validação). - Defina limites: tamanhos de strings, faixas numéricas e formatos (CPF, e-mail, datas).
- Centralize a validação por regra de negócio, não “no meio” do código.
2 SQL e templates: proteja contra injeção e escape incorreto
Em PHP, os erros mais caros de corrigir geralmente envolvem banco e saída de conteúdo.
SQL injection acontece quando você monta queries manualmente com dados do usuário.
Já o XSS aparece quando você renderiza conteúdo sem escape apropriado.
- Use prepared statements com parâmetros. Não concatene valores dentro do SQL.
- Valide e normalize antes de armazenar. Mesmo com prepared statements, formatos inválidos viram dados ruins.
- Escape na saída (especialmente em HTML). Não confunda “sanitizar” com “escapar”.
- Controle o contexto: escape para HTML, atributo, URL e JavaScript não são equivalentes.
e mantenha os valores sempre como parâmetros.
3 Tratamento de erros e exceções: falhar do jeito certo
Erros silenciosos e “catch genérico” criam um sistema que parece funcionar… até a primeira situação real.
Em produção, você quer saber: o que aconteceu, onde aconteceu e como responder.
Também quer evitar vazar detalhes sensíveis em mensagens.
- Não sufoque exceções sem logar e sem retorno adequado.
- Evite
catch (Exception $e)como solução para tudo. Trate por contexto (validação, banco, rede). - Retorne mensagens consistentes para o cliente e detalhes no log interno.
- Use códigos HTTP ou modelos de erro claros (ex.: “400 validação”, “409 conflito”, “500 inesperado”).
- Não dependa de
die()/var_dump()em runtime.
Além disso, configure erros para desenvolver e para produção de forma diferente: em dev, você precisa enxergar.
Em produção, você precisa proteger e registrar.
4 Performance e concorrência: o “funciona” não é suficiente
PHP pode ser rápido quando o código está bem dimensionado. O problema é quando pequenos deslizes viram gargalos:
queries N+1, cálculos repetidos, conexões abertas sem necessidade e lógica pesada no request.
- Evite N+1: quando você busca uma lista e depois busca itens um a um, o número de queries explode.
- Não recalcule o que já existe: cache de curto prazo (quando aplicável) e cálculo único por request.
- Cuide de índices no banco para filtros e ordenações frequentes.
- Conexões e transações: mantenha consistência sem abrir e fechar em excesso.
- Defina limites para paginação e ordenação. Nunca traga tudo de uma vez sem necessidade.
Exemplo SQL seguro + validação básica antes de consultar
Abaixo vai um padrão simples: valide entrada, use prepared statements e trate exceções com mensagens
consistentes. É o tipo de base que evita várias categorias de erro comuns no dia a dia.
<?php
declare(strict_types=1);
function getUserByEmail(PDO $pdo, string $email): array
{
// Validação simples (exemplo). Ajuste conforme sua regra de negócio.
$email = trim($email);
if ($email === '' || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
throw new InvalidArgumentException('E-mail inválido.');
}
try {
$stmt = $pdo->prepare(
'SELECT id, name, email FROM users WHERE email = :email LIMIT 1'
);
$stmt->execute([':email' => $email]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
return $row ?? [];
} catch (PDOException $e) {
// Registre $e em log interno (não mostre detalhes ao usuário)
throw new RuntimeException('Erro ao consultar usuário.');
}
}
Quer melhorar ainda mais o seu PHP?
Recomendo que você continue com outros posts no yurideveloper.com:
mais padrões práticos, exemplos e decisões que fazem diferença em produção.
“`
Sou Apaixonado pela programação e estou trilhando o caminho de ter cada diz mais conhecimento e trazer toda minha experiência vinda do Design para a programação resultando em layouts incríveis e idéias inovadoras! Conecte-se Comigo!