Comment insérer une valeur dans MySQL composée de guillemets simples ou doubles. c'est à dire
This is Ashok's Pen.
Le devis unique créera des problèmes. Il peut y avoir d'autres caractères d'échappement.
Comment insérez-vous correctement les données?
Réponses:
En termes simples:
SELECT 'This is Ashok''s Pen.';
Donc, à l'intérieur de la chaîne, remplacez chaque guillemet simple par deux d'entre eux.
Ou:
SELECT 'This is Ashok\'s Pen.'
Échappez-le =)
la source
'est le caractère d'échappement. Donc, votre chaîne devrait être:
Si vous utilisez du code frontal, vous devez effectuer un remplacement de chaîne avant d'envoyer les données à la procédure stockée.
Par exemple, en C #, vous pouvez faire
puis transmettez la valeur à la procédure stockée.
la source
''
(deux guillemets simples) est une alternative spéciale autorisée pour "échapper" un caractère guillemet simple.Voir ma réponse à "Comment échapper des caractères dans MySQL"
Quelle que soit la bibliothèque que vous utilisez pour parler à MySQL, une fonction d'échappement sera intégrée, par exemple en PHP, vous pouvez utiliser mysqli_real_escape_string ou PDO :: quote
la source
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.
.Si vous utilisez des instructions préparées, le pilote gérera tout échappement. Par exemple (Java):
la source
Utilisez ce code:
Cela résoudra votre problème, car la base de données ne peut pas détecter les caractères spéciaux d'une chaîne.
la source
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.
.Il existe une autre façon de procéder qui peut être plus sûre ou non, selon votre point de vue. Il nécessite MySQL 5.6 ou ultérieure en raison de l'utilisation d'une fonction de chaîne spécifique:
FROM_BASE64
.Disons que vous avez ce message que vous souhaitez insérer:
Cette citation a un tas de guillemets simples et doubles et serait vraiment pénible à insérer dans MySQL. Si vous insérez cela à partir d'un programme, il est facile d'échapper aux guillemets, etc. ou sensible au retour à la ligne, etc.
Au lieu de cela, vous pouvez encoder le texte en Base64, donc vous avez une chaîne "propre":
SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn VkSE1uSUMwaUlBPT0K
Quelques notes sur l'encodage Base64:
base64
que MySQL est 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 s'insérera sans aucune plainte, et vous n'avez pas besoin d'échapper manuellement au texte à l'intérieur de la chaîne.
la source
Vous devez échapper les caractères spéciaux à l'aide du
\
caractère.Devient:
la source
Si vous souhaitez conserver (') l'apostrophe dans la base de données, utilisez le code ci-dessous
$ new_value peut stocker dans la base de données.
la source
Vous pouvez utiliser ce code,
si mysqli_real_escape_string () ne fonctionne pas.
la source
En PHP, utilisez mysqli_real_escape_string .
Exemple du manuel PHP:
la source
la source
Si vous utilisez PHP, utilisez simplement la fonction addlashes ().
Le manuel PHP ajoute des barres obliques
la source
Pour l'accès par programme, vous pouvez utiliser des espaces réservés pour échapper automatiquement les caractères non sécurisés à votre place.
En Perl DBI, par exemple, vous pouvez utiliser:
la source
Utilisez soit addlahes (), soit mysql_real_escape_string ().
la source
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.
.Comme je le fais, en utilisant Delphi:
TheString pour "échapper":
Solution:
Résultat:
Cette fonction remplacera tous les Char (39) par "\ '" vous permettant d'insérer ou de mettre à jour des champs de texte dans MySQL sans aucun problème.
Des fonctions similaires se trouvent dans tous les langages de programmation!
la source
Vous pourriez peut-être jeter un œil à la fonction
QUOTE
dans le manuel MySQL.la source