2017-06-01 3 views
0

J'ai une base de données MySQL (5.7.18) avec une table d'articles. Chaque article contient un résumé en tant que chaîne html dans la colonne abstract. En raison d'un bogue dans l'éditeur HTML, un grand nombre de balises HTML sont pollués avec un style ennuyeux, comme ceci:Le point-virgule MySQL dans l'instruction de mise à jour provoque une erreur de syntaxe.

<h1 style="color: rgb(0, 0, 0);">Wonderful Abstract</h1> 

Pour résoudre ce problème, je suis en train de la requête suivante:

UPDATE `article` SET `abstract`=REPLACE(`abstract`,' style="color: rgb(0, 0, 0);"','') 

Malheureusement, une erreur de syntaxe est affichée:

# 1064 - Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de « » style = "color: rgb (0, 0, 0)) » à la ligne 1

Si le point-virgule est enlevé fonctionne très bien:

UPDATE `article` SET `abstract`=REPLACE(`abstract`,' style="color: rgb(0, 0, 0)"',''); 

Mais il doit être remplacé dans la chaîne trop ...

Je trouve une référence here disant pour y échapper:

UPDATE `article` SET `abstract`=REPLACE(`abstract`,' style="color: rgb(0, 0, 0)\;"','') 

Mais le message d'erreur est toujours affiché.

Une autre option décrite dans la même origine est d'ajouter un point-virgule à la fin de l'instruction:

UPDATE `article` SET `abstract`=REPLACE(`abstract`,' style="color: rgb(0, 0, 0);"',''); 

Et la combinaison de ces deux:

UPDATE `article` SET `abstract`=REPLACE(`abstract`,' style="color: rgb(0, 0, 0)\;"',''); 

Le message d'erreur est toujours là .

+0

Je ne peux pas sembler [reproduire] (http://rextester.com/OOQ84230) cette question au niveau local, au moins le texte de remplacement par lui-même fonctionne pour moi. –

+0

Merci @TimBiegeleisen. C'est donc probablement quelque chose de spécifique à mon environnement. – Dorad

+0

Impossible de reproduire. Le point-virgule d'une chaîne ne doit pas causer de problème, mais entourez toujours la chaîne de guillemets simples dans l'instruction d'insertion. Essayez de terminer votre déclaration avec; $$ Délimiteur. (Je ne sais pas si cela aide) – Karthik

Répondre

1

Trouvé.

Il s'agissait d'un champ dans phpMyAdmin qui est défini par défaut sur le point-virgule (;).

Je l'ai changé en un char inutilisé et la requête s'est exécutée normalement.

Delimiter

+0

phpMyAdmin? Man ... il y a de meilleurs choix là-bas: p –

+0

Il n'y a pas de compte pour le goût ... (ça rime en hébreu: עַל טַעַם וְעַל רֵיחַ אֵין לְהִתְוַכֵּחַ). – Dorad

+0

Bien sûr, mais dans ce cas, phpMyAdmin vous a vissé hors de l'utilisation de la syntaxe SQL valide –

0

Je ne peux pas reproduire ce comportement ...

http://rextester.com/BZAPY91725

Peut-être que vous utilisez un SPROC?

+0

Salut. Merci pour votre temps, ce n'est pas une SPROC. c'est une requête SQL directe dans phpMyAdmin. – Dorad