Como faço para inserir um valor no MySQL que consiste em aspas simples ou duplas. ie
This is Ashok's Pen.
A aspa simples criará problemas. Pode haver outros caracteres de escape.
Como você insere os dados corretamente?
Como faço para inserir um valor no MySQL que consiste em aspas simples ou duplas. ie
This is Ashok's Pen.
A aspa simples criará problemas. Pode haver outros caracteres de escape.
Como você insere os dados corretamente?
Respostas:
Simplificando:
SELECT 'This is Ashok''s Pen.';
Portanto, dentro da string, substitua cada aspa simples por duas delas.
Ou:
SELECT 'This is Ashok\'s Pen.'
Escape it =)
'é o caractere de escape. Portanto, sua string deve ser:
Esta é a caneta de Ashok
Se você estiver usando algum código de front-end, precisará fazer uma substituição de string antes de enviar os dados para o procedimento armazenado.
Por exemplo, em C # você pode fazer
value = value.Replace("'", "''");
e, em seguida, passe o valor para o procedimento armazenado.
''
(duas aspas simples) é uma alternativa especial permitida para "escapar" de um caractere de aspas simples.
Veja minha resposta para "Como escapar caracteres no MySQL"
Qualquer biblioteca que você estiver usando para conversar com o MySQL terá uma função de escape embutida, por exemplo, no PHP você pode usar mysqli_real_escape_string ou PDO :: quote
This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used.
,.
Se você usar instruções preparadas, o driver tratará de 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);
?>
Isso resolverá seu problema, porque o banco de dados não consegue detectar os caracteres especiais de uma string.
This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used.
,.
Existe outra maneira de fazer isso que pode ou não ser mais segura, dependendo da sua perspectiva. Requer MySQL 5.6 ou posterior devido ao uso de uma função de string específica:FROM_BASE64
.
Digamos que você tenha esta mensagem que gostaria de inserir:
"Ah", Nick Quase Sem Cabeça acenou com a mão elegante, "uma questão sem importância ... Não é como se eu realmente quisesse entrar ... Pensei em me inscrever, mas aparentemente não cumpro os requisitos. '- "
Essa citação tem um monte de aspas simples e duplas e seria muito chato inserir no MySQL. Se você estiver inserindo isso de um programa, é fácil escapar das aspas, etc. Mas, se você tiver que colocar isso em um script SQL, você terá que editar o texto (para escapar das aspas) que pode estar sujeito a erros ou sensível a quebra de linha, etc.
Em vez disso, você pode codificar o texto em Base64 para ter uma string "limpa":
SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
Algumas notas sobre a codificação Base64:
base64
MySQL concorda com a codificação de caracteres (eu recomendo UTF-8).Agora, para carregar isso no MySQL:
INSERT INTO my_table (text) VALUES (FROM_BASE64('
SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
'));
Isso será inserido sem qualquer reclamação e você não precisará escapar manualmente nenhum texto dentro da string.
Se você quiser manter o apóstrofo (') no banco de dados, use o código abaixo
$new_value = str_replace("'","\'", $value);
$ new_value pode armazenar no banco de dados.
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, apenas use a função addslashes ().
Para acesso programático, você pode usar marcadores de para escapar automaticamente de caracteres não seguros 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 addlahes () ou mysql_real_escape_string ().
This, mysql_real_escape_string() extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used.
,.
Do jeito que eu faço, usando Delphi:
TheString para "escapar":
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 os Char (39) por "\ '" permitindo a você inserir ou atualizar campos de texto no MySQL sem nenhum problema.
Funções semelhantes são encontradas em todas as linguagens de programação!