Pergunta

Como faço para inserir um valor em MySQL que consistem em aspas simples ou duplas. i

This is Ashok's Pen.

O apóstrofo irá criar problemas. Pode haver outros caracteres de escape.

Como você inserir os dados corretamente?

Foi útil?

Solução

Coloque simplesmente:

SELECT 'This is Ashok''s Pen.';

Assim, dentro da cadeia, substituir cada aspas simples com dois deles.

Ou:

SELECT 'This is Ashok\'s Pen.'

Escape dele =)

Outras dicas

Veja a minha resposta para "Como escapar caracteres no MySQL "

biblioteca Tudo o que você está usando para falar com MySQL terá uma função escapar construído em, por exemplo, em PHP você pode usar mysqli_real_escape_string ou PDO :: citação

' é o caractere de escape. Portanto, o seu texto deverá ser:

Esta é Caneta de Ashok '

Se você estiver usando algum código front-end, você precisa fazer um texto de substituição antes de enviar os dados para o procedimento armazenado.

Por exemplo, em C # você pode fazer

value = value.Replace("'", "''");

e, em seguida, passar o valor para o procedimento armazenado.

Se você usar declarações preparadas, o motorista vai lidar com qualquer escape. Por exemplo (Java):

Connection conn = DriverManager.getConnection(driverUrl);
conn.setAutoCommit(false);
PreparedStatement prepped = conn.prepareStatement("INSERT INTO tbl(fileinfo) VALUES(?)");
String line = null;
while ((line = br.readLine()) != null) {
    prepped.setString(1, line);
    prepped.executeQuery();
}
conn.commit();
conn.close();

Use este código:

<?php
    $var = "This is Ashok's Pen.";

    mysql_real_escape_string($var);
?>

Isto irá resolver o seu problema, porque o banco não pode detectar os caracteres especiais de uma string.

Há uma outra maneira de fazer isso que pode ou não pode ser mais seguro, dependendo da sua perspectiva. Ela exige MySQL 5.6 ou posterior por causa do uso de uma função seqüência específica: FROM_BASE64 .

Vamos dizer que você tem essa mensagem que você gostaria de inserir:

"Ah," Nick Quase Sem Cabeça acenou uma mão elegante, "uma questão de menor importância.... Não é como se eu realmente queria participar.... Pensei em aplicar, mas aparentemente eu 'não cumprem os requisitos '-"

Esta citação tem um monte de simples e dupla citações e seria uma dor real para inserir em MySQL. Se você estiver inserindo que a partir de um programa, é fácil escapar das citações, etc. Mas, se você tem que colocar isso em um script SQL, você terá que editar o texto (para escapar as aspas) que poderia ser propenso a erros ou sensível a palavra-wrapping, etc.

Em vez disso, você pode Base64 codificar o texto, então você tem uma string "limpa":

JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K

Algumas notas sobre Base64-codificação:

  1. Base64-codificação é a binário encoding , então é melhor você ter certeza que você obter o seu conjunto de caracteres correto quando você faz a codificação, porque o MySQL vai decodificar a seqüência de Base64 codificado em bytes e, em seguida, interpretar os. Certifique-se base64 e MySQL concordar com o que a codificação de caracteres é (eu recomendo UTF-8).
  2. Eu enrolou o fio para 50 colunas para facilitar a leitura no Stack Overflow. Você pode envolvê-lo para qualquer número de colunas que você quer (ou não envolver a todos) e será ainda trabalho.

Agora, para carregar isso em MySQL:

SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
'));

Isto irá inserir, sem quaisquer queixas, e você não tem que manualmente escapar qualquer texto dentro da cadeia.

Você deve escapar os caracteres especiais usando o caractere \.

This is Ashok's Pen.

Torna-se:

This is Ashok\'s Pen.

Se você quiser manter apóstrofo ( ') no banco de dados usar este código abaixo

$new_value = str_replace("'","\'", $value); 

$ novo_valor pode armazenar no banco de dados.

Você pode usar esse código,

<?php
     $var = "This is Ashok's Pen.";
     addslashes($var);
?>

Se mysqli_real_escape_string () não funciona.

Em PHP, use mysqli_real_escape_string ..

Exemplo do Manual do PHP:

<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City");

$city = "'s Hertogenbosch";

/* this query will fail, cause we didn't escape $city */
if (!mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
    printf("Error: %s\n", mysqli_sqlstate($link));
}

$city = mysqli_real_escape_string($link, $city);

/* this query with escaped $city will work */
if (mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
    printf("%d Row inserted.\n", mysqli_affected_rows($link));
}

mysqli_close($link);
?>
$var = mysqli_real_escape_string($conn, $_POST['varfield']);

Se você estiver usando PHP, basta usar o addslashes () função.

PHP addslashes manuais

Para o acesso programático, você pode usar espaços reservados para escapar automaticamente caracteres inseguros para você.

Em Perl DBI, por exemplo, você pode usar:

my $string = "This is Ashok's pen";
$dbh->do("insert into my_table(my_string) values(?)",undef,($string)); 

Use qualquer addslahes () ou mysql_real_escape_string ().

O que eu faço, usando Delphi:

theString para "escape":

TheString=" bla bla bla 'em some more apo:S 'em and so on ";

Solução:

StringReplace(TheString, #39,'\'+#39, [rfReplaceAll, rfIgnoreCase]);

Resultado:

TheString=" bla bla bla \'em some more apo:S \'em and so on ";

Esta função irá substituir todos Char (39) com "\ '" que lhe permite inserir ou campos atualização de texto no MySQL sem qualquer problema.

funções semelhantes são encontrados em todas as linguagens de programação!

Talvez você poderia dar uma olhada em função QUOTE no manual MySQL.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top