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.

Até a próxima!

27 comentários em “PHP-MySQL: Inserindo aspas simples, aspa dupla no banco de dados

  • 21 de outubro de 2012 em 12:02
    Permalink

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

    utf8_decode();

    Resposta
  • 28 de outubro de 2012 em 11:45
    Permalink

    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
  • 22 de dezembro de 2012 em 0:37
    Permalink

    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
  • 6 de fevereiro de 2013 em 16:40
    Permalink

    Funcionou perfeitamente, valeu a contribuição.

    Resposta
  • 6 de fevereiro de 2013 em 16:50
    Permalink

    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
  • 11 de março de 2013 em 15:59
    Permalink

    Até hoje isso ta ajudando, valew

    Resposta
  • 17 de julho de 2014 em 14:21
    Permalink

    ajudou muitooo cara, muito obrigado mesmo!

    Resposta
  • 5 de novembro de 2014 em 16:08
    Permalink

    Muito boa a dica. Me ajudou muito!!!

    Resposta
  • 5 de janeiro de 2016 em 11:13
    Permalink

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

    Resposta
  • 7 de setembro de 2016 em 21:44
    Permalink

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

    Resposta
  • 2 de dezembro de 2017 em 12:40
    Permalink

    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
    • 6 de dezembro de 2017 em 21:32
      Permalink

      Edu,

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

      Att.

      Tiago

      Resposta
  • 26 de dezembro de 2018 em 23:13
    Permalink

    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
  • 2 de janeiro de 2019 em 14:45
    Permalink

    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
    • 3 de janeiro de 2019 em 10:10
      Permalink

      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
  • 18 de janeiro de 2019 em 19:05
    Permalink

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

    Resposta

Deixe uma resposta

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