MySQLPHP

PHP-MySQL: Inserindo aspas simples, aspa dupla no banco de dados

Um problema que encontrei e compartilho com vocês, é que ao inserir um dado no banco de dados contendo alguns tipos de caracteres, podem causar erro.

Caracteres que podem causar problemas de inserção: apóstrofo (‘), aspas(“) e barra invertida(\).

Exemplo de texto a ser gravado:
Olá D’arrrrr, seja bem-vindo ao ‘linhadecomando.com’.

“Imagine que você digitou o texto acima num campo do seu formulário e agora quer gravar no banco. Se fizer o insert direto deste texto vai dar erro”.

Para resolver este problema você vai precisar da função addslashes();

segue exemplo:

<?
  $titulo_noticia = addslashes($_POST['titulo_noticia']);
  INSERT INTO noticias (titulo_noticia) VALUES ('$titulo_noticia');
?>

Dica: Primeiro, converta a string (texto) com a função addslashes() e então, execute o INSERT.

Outra solução:
https://www.php.net/manual/en/filter.filters.sanitize.php

$titulo_noticia = filter_var($_POST['titulo_noticia'], FILTER_SANITIZE_MAGIC_QUOTES);

Até a próxima!

31 thoughts on “PHP-MySQL: Inserindo aspas simples, aspa dupla no banco de dados

  • Valeu cara , eu estava com este problema a meses.
    Para quem quiser corrigir o chatset , usem.

    utf8_decode();

    Resposta
  • KARLOS EDUARDO ALBUQUERQUE ALVESS

    MUITO BOM… .. ESTAVA COM PROBLEMAS EM INSERIR UMA DESCRIÇÃO NO BD USANDO O PLUGIN CKEDITOR(EDITOR DE TEXTO)… COM ESSA SIMPLES FUNÇÃO .. CONSEGUI ….

    VLW.. CONTINUE ASSIM;…

    Resposta
  • Muito bom amigo, estava corrento atras de um script que faria isso e acabei achando uma função do próprio Php que ficou melhor ainda !

    Obrigado por compartilha vosso conhecimento!

    Resposta
  • Eduardo Hemann

    Funcionou perfeitamente, valeu a contribuição.

    Resposta
  • Miguel S. Furghestti

    Muito bom cara.

    Muito obrigado. Mesmo sendo simples o problema me ajudou a aprender uma nova coisa e resolver um problema em meu gerenciador.

    Abraços

    Resposta
  • Mauricio

    Até hoje isso ta ajudando, valew

    Resposta
  • Henrique

    Muito bom! Valeu demais!

    Resposta
  • ajudou muitooo cara, muito obrigado mesmo!

    Resposta
  • Robert

    Muito boa a dica. Me ajudou muito!!!

    Resposta
  • Alexandre

    Opa valeu!!!!
    Não conhecia essa função do php.
    Abraço, obrigado pela ajuda!!!!

    Resposta
  • duques

    usando essa função contínua colocando barra invertida, ex: insiro “lider”, grava: \”lider\”

    Resposta
  • Edu

    Estou com o problema da descricao conter aspas simples e duplas. Da pau na tabela ou no html. Consigo gravar o campo Chave de Impacto 1/2" Mini 55' kgfm mas na leitura inserido em um campo input ele corta tudo depois das aspas simples.

    Resposta
    • Edu,

      poderia enviar o código de exibição no input.

      Att.

      Tiago

      Resposta
  • Carlos Alberto Ramos Teixeira

    Por favor;
    Usei isso no form na linha de “Cadastar”

    // Cadastro de Usuario
    if ( isset($_POST[‘cadastrar’]) ):

    $nome_atividade = $_POST[‘nome_atividade’];
    $nome_livro = addslashes($_POST[‘nome_livro’]);

    O Resultado foi esse ao cadastrar:

    D\’Aspas Simples

    Na linha de Alterar:

    // Alterar Usuario
    if ( isset($_POST[‘alterar’]) ) {

    $id = $_POST[‘id_uii’];

    $nome_atividade = $_POST[‘nome_atividade’];
    $nome_livro = addslashes($_POST[‘nome_livro’]);

    Visualizo no form modal o mesmo campo:

    D’Aspas Simples

    Será que terei que colocar nas function

    public function insert()

    e

    public function update($id) {

    Tenho outros campos que terei que resolver pois vai acontecer digitação com (‘). Retirando a função addslashers() observo que cadastra no banco com (‘) na “Lista” também mostra (‘), mas torna-se inviável o form modal “Alterar”, ou seja, deixa de editar não só o campo que contem o texto com (‘), mas sim todos.
    Obrigado

    Resposta
  • Carlos Alberto Ramos Teixeira

    Tiago, recebi seu e-mail informando que estava de recesso.
    Com relação ao caso da (‘) apóstrofe continuo o problema somente para o form modal, ou seja, quando clico em “Alterar”. O resultado teria que ser igual aos outros campos onde mostra todos os registros. Se Cadastrar em um campo D’Alila, esse nome aparece perfeitamente na lista de registro (index.php). Agora se clicar no Botão alterar desse registro com D’Alivia observa-se que todos os registros desse id não aparecem no form Alterar.
    Vou colocar o código aqui, mas não sei se vai ficar ruim para analisar:
    Observação: (teste apenas no campo ‘nome_livro’) Fui orientado para colocar filter_input(INPUT_POST, ‘nome_livro’,
    Repare que coloquei tanto nas linhas dp Cadastramento(insert) como nas linhas do update (Alterar).
    Repito Cadastrar creio que funcionou, mas Alterar prejudicar todos o formulário modal.

    setNome_atividade($nome_atividade);
    $usuario->setNome_livro($nome_livro);
    $usuario->setNome_autor($nome_autor);
    $usuario->setNome_editora($nome_editora);
    $usuario->setQuant_fl($quant_fl);
    $usuario->setFl_parei($fl_parei);
    $usuario->setData_inicio($data_inicio);
    $usuario->setData_termino($data_termino);
    $usuario->setData_paralisacao($data_paralisacao);
    $usuario->setObservacao($observacao);

    if ($usuario->insert()) {

    echo ‘
    ×
    OK! Incluido com sucesso!!! ‘;

    } else {
    echo ‘
    ×
    OK! Erro ao alterar!!! ‘;
    }
    endif;

    //exclusao de Usuario
    if (isset($_POST[‘excluir_ui’])){

    $id = $_POST[‘id_ui’];

    $usuario->delete($id);

    }

    // Alterar Usuario
    if ( isset($_POST[‘alterar’]) ) {

    $id = $_POST[‘id_uii’];

    $nome_atividade = $_POST[‘nome_atividade’];
    $nome_livro = filter_input(INPUT_POST, ‘nome_livro’, FILTER_SANITIZE_STRING);
    $nome_autor = $_POST[‘nome_autor’];
    $nome_editora = $_POST[‘nome_editora’];
    $quant_fl = $_POST[‘quant_fl’];
    $fl_parei = $_POST[‘fl_parei’];
    $data_inicio = !$_POST[‘data_inicio’] ? NULL :
    date(‘Y-m-d’, strtotime(str_replace(‘/’, ‘-‘,$_POST[‘data_inicio’])));
    $data_termino = !$_POST[‘data_termino’] ? NULL :
    date(‘Y-m-d’, strtotime(str_replace(‘/’, ‘-‘,$_POST[‘data_termino’])));
    $data_paralisacao = !$_POST[‘data_paralisacao’] ? NULL :
    date(‘Y-m-d’, strtotime(str_replace(‘/’, ‘-‘,$_POST[‘data_paralisacao’])));
    $observacao= $_POST[‘observacao’];

    $usuario->setNome_atividade($nome_atividade);
    $usuario->setNome_livro($nome_livro);
    $usuario->setNome_autor($nome_autor);
    $usuario->setNome_editora($nome_editora);
    $usuario->setQuant_fl($quant_fl);
    $usuario->setFl_parei($fl_parei);
    $usuario->setData_inicio($data_inicio);
    $usuario->setData_termino($data_termino);
    $usuario->setData_paralisacao($data_paralisacao);
    $usuario->setObservacao($observacao);

    $usuario->update($id);

    }

    ?>

    ****
    Obrigado pela atenção.

    Resposta
    • Carlos,

      faz o seguinte:

      Tela de Cadastro: aplica a função addslashes() antes do insert.
      Tela de Edição: aplica a função stripslashes() no campo de exibição e addslashes() antes do update.

      Resposta
  • Malate

    Muito bom… Me ajudou a resolver meu problema com uma query.

    Resposta
  • TIago Lopes

    2 aspas simples no SQL SERVER e Postgres

    Exemplo:

    Erro: SELECT ‘aspas simples ‘s’

    Correção: SELECT ‘aspas simples ”s’

    Resposta
  • Breno

    Muito BOM CARA!!! Eu estava precisando disso msm.

    Resposta
  • 2021 e está foi a solução mais simples, direta e objetiva que encontrei para este problema. Parabéns meu amigo e muito obrigado.

    Resposta
  • Olá gente,
    Minha sina são as aspas.
    Digitar todas a datas ano, mês e dia é possível, mas tendo uma PROCEDURE para fazer isso é muito bom.
    Ocorre que venho recebendo essa mensagem de erro e acredito que senha a aspa. Mensagem de erro:
    “Erro
    Comando SQL: Copiar
    CREATE PROCEDURE data_frases;

    Mensagens do MySQL : Documentação
    #1064 – Você tem um erro de sintaxe no seu SQL próximo a ” na linha 1

    O código é esse:

    Erro
    Comando SQL: Copiar
    CREATE PROCEDURE data_frases;
    Mensagens do MySQL : Documentação
    #1064 – Você tem um erro de sintaxe no seu SQL próximo a ” na linha 1

    Resposta

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *