Comment insérer une valeur dans MySQL constituée de guillemets simples ou doubles. c'est à dire
This is Ashok's Pen.
La citation unique va créer des problèmes. Il pourrait y avoir d'autres personnages d'échappement.
Comment insérez-vous les données correctement?
En termes simples:
SELECT 'This is Ashok''s Pen.';
Donc, à l'intérieur de la chaîne, remplacez chaque citation par deux.
Ou:
SELECT 'This is Ashok\'s Pen.'
Escape it =)
Voir ma réponse à "Comment échapper des caractères dans MySQL"
Quelle que soit la bibliothèque que vous utilisez pour dialoguer avec MySQL, une fonction d'échappement est intégrée, par exemple. dans PHP, vous pouvez utiliser mysqli_real_escape_string ou PDO :: quote
'est le personnage d'échappement. Donc, votre chaîne devrait être: Ceci est le stylo d'Ashok
Modifier:
Si vous utilisez du code frontal, vous devez remplacer la chaîne avant d’envoyer les données au SP.
Pour par exemple. en C # vous pouvez faire
value = value.Replace("'","''");
puis passez la valeur à SP.
Si vous utilisez des instructions préparées, le pilote gérera toutes les échappements. Par exemple (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();
C'est une question très ancienne, mais il existe une autre façon de le faire qui peut ou peut ne pas être plus sûre, selon votre point de vue. Il nécessite MySQL 5.6 ou une version ultérieure en raison de l'utilisation d'une fonction de chaîne spécifique: FROM_BASE64
.
Supposons que vous souhaitiez insérer le message suivant:
"Ah," Nick presque sans tête agita une main élégante, "une affaire sans importance ... Ce n'est pas comme si je voulais vraiment devenir membre ... Je pensais que je pourrais postuler, mais apparemment je ne le fais pas" t répondre aux exigences '- "
Cette citation contient des guillemets simples et doubles et serait très pénible à insérer dans MySQL. Si vous insérez cela depuis un programme, il est facile d'échapper aux guillemets, etc. Mais si vous devez l'inscrire dans un script SQL, vous devrez éditer le texte (pour échapper aux guillemets), ce qui pourrait être sujet à des erreurs ou sensible au Word-wrapping, etc.
Au lieu de cela, vous pouvez encoder le texte en base64, vous avez donc une chaîne "propre":
SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
Quelques notes sur le codage base64:
base64
et MySQL sont d’accord sur le codage des caractères (je recommande UTF-8).Maintenant, pour charger ceci dans MySQL:
INSERT INTO my_table (text) VALUES (FROM_BASE64('
SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
'));
Cela insérera sans aucune plainte et vous n'avez pas à échapper manuellement du texte à l'intérieur de la chaîne.
Vous devriez échapper aux caractères spéciaux en utilisant le caractère \
.
This is Ashok's Pen.
Devient:
This is Ashok\'s Pen.
Utilisez ce code:
<?php $var = "This is Ashok's Pen.";
mysql_real_escape_string($var);?>
Cela résoudra votre problème car la base de données ne peut pas détecter le caractère spécial de la chaîne.
Si vous voulez conserver (') apostrophe dans la base de données, utilisez le code ci-dessous
$new_value = str_replace("'","\'", $value);
$ new_value peut stocker dans la base de données.
Vous pouvez utiliser ce code
<?php
$var = "This is Ashok's Pen.";
addslashes($var);?>
si mysqli_real_escape_string ne fonctionne pas
En PHP, utilisez mysqli_real_escape_string ..
Exemple tiré du manuel 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);
?>
si vous utilisez php, utilisez simplement la fonction addlashes ()
$var = mysqli_real_escape_string($conn, $_POST['varfield']);
Pour un accès programmatique, vous pouvez utiliser espaces réservés pour échapper automatiquement les caractères non sécurisés pour vous.
Dans Perl DBI, par exemple, vous pouvez utiliser:
my $string = "This is Ashok's pen";
$dbh->do("insert into my_table(my_string) values(?)",undef,($string));
utilisez includeslahes (), .__ ou mysql_real_escape_string
Peut-être pourriez-vous jeter un coup d’œil à la fonction Quote dans le manuel Mysql.
http://dev.mysql.com/doc/refman/5.7/fr/string-functions.html#function_quote
La façon dont je le fais, en utilisant Delphi:
TheString pour "s'échapper":
TheString=" bla bla bla 'em some more apo:S 'em and so on ";
Solution:
StringReplace(TheString, #39,'\'+#39, [rfReplaceAll, rfIgnoreCase]);
Résultat:
TheString=" bla bla bla \'em some more apo:S \'em and so on ";
Cette fonction remplacera tous les caractères (39) par "\ '", ce qui vous permettra d’insérer ou de mettre à jour des champs de texte dans MySQL sans problème.
Des fonctions similaires se retrouvent dans toutes les langues prog!