A documentação do MySQL diz que deveria ser \'
. No entanto, scite e mysql mostram que ''
funciona. Eu vi isso e funciona. O que devo fazer?
\'
é MySQL específico, enquanto ''
é compatível com ANSI SQL, se não me engano
A documentação do MySQL diz que deveria ser \'
. No entanto, scite e mysql mostram que ''
funciona. Eu vi isso e funciona. O que devo fazer?
\'
é MySQL específico, enquanto ''
é compatível com ANSI SQL, se não me engano
Respostas:
A documentação do MySQL que você cita realmente diz um pouco mais do que você menciona. Também diz:
Um "
'
" dentro de uma sequência citada com "'
" pode ser escrito como "''
".
(Além disso, você vinculou à versão MySQL 5.0 da Tabela 8.1. Sequências de escape de caracteres especiais e a versão atual é 5.6 - mas a tabela 8.1 atual . Sequências de escape de caracteres especiais são bastante semelhantes.)
Eu acho que a notabackslash_quote (string)
do Postgres no parâmetro é informativa:
Isso controla se uma aspas pode ser representada por
\'
em uma string literal. A maneira preferida e padrão do SQL para representar uma aspas é dobrando-a (''
), mas o PostgreSQL também historicamente também aceitou\'
. No entanto, o uso de\'
cria riscos à segurança ...
Isso me diz que usar um caractere de aspas simples duplicado é uma escolha geral e de longo prazo melhor do que usar uma barra invertida para escapar da aspas simples.
Agora, se você também quiser adicionar opções de linguagem, escolha do banco de dados SQL e suas peculiaridades não padrão e escolha da estrutura de consulta à equação, poderá ter uma escolha diferente. Você não fornece muita informação sobre suas restrições.
O SQL padrão usa aspas dobradas; O MySQL precisa aceitar isso para ser razoavelmente compatível.
'He said, "Don''t!"'
'
" dentro de uma sequência citada com " '
" pode ser escrito como " ''
" . Um " "
" dentro de uma string citada com " "
" pode ser escrito como " ""
". Preceda o caractere de citação com um caractere de escape ("` `").
O que eu acredito que user2087510 significava era:
name = 'something'
name = name.replace("'", "\\'")
Eu também usei isso com sucesso.
Aqui está um exemplo:
SELECT * FROM pubs WHERE name LIKE "%John's%"
Basta usar aspas duplas para incluir a aspas simples.
Se você insistir em usar aspas simples (e a necessidade de escapar do personagem):
SELECT * FROM pubs WHERE name LIKE '%John\'s%'
Existem três maneiras pelas quais estou ciente. O primeiro não é o mais bonito e o segundo é o caminho comum na maioria das linguagens de programação:
'I mustn''t sin!'
\
antes da citação simples '
:'I mustn\'t sin!'
"I mustn't sin!"
\'
que é usada por muitas linguagens de programação, mas ''
é suportada por mais dialetos SQL; portanto, usar a opção 1 é melhor para compatibilidade. O sqlite, por exemplo, não funciona com escapes de barra invertida.
Substitua a sequência
value = value.replace(/'/g, "\\'");
onde value é sua string que será armazenada em seu banco de dados.
Mais distante,
Pacote NPM para isso, você pode dar uma olhada nele
Eu acho que se você tiver algum ponto de dados com apóstrofo, você pode adicionar um apóstrofo antes do apóstrofo
por exemplo. 'Este é o lar de João'
Aqui o MYSQL assume duas frases 'Este é o lugar de John'
Você pode colocar 'Este é o lugar de John'. Eu acho que deveria funcionar assim.
No PHP, eu gosto de usar mysqli_real_escape_string () que escapa caracteres especiais em uma string para uso em uma instrução SQL.
consulte https://www.php.net/manual/en/mysqli.real-escape-string.php
Possivelmente fora de tópico, mas talvez você tenha vindo aqui procurando uma maneira de higienizar a entrada de texto de um formulário HTML, para que, quando um usuário insira o caractere apóstrofo, ele não gere um erro ao tentar gravar o texto em um SQL tabela baseada em um banco de dados. Existem algumas maneiras de fazer isso, e você também pode querer ler sobre injeção de SQL, mas uma opção simples no PHP é usar a função htmlspecialchars () que converterá todos os seus apóstrofos nos '
quais é possivelmente o que você deseja armazenar de qualquer forma.
''
ou não\'
?