Bonjour,
Au travail, je suis chargée de réparer les bugs d'une application web que je n'ai pas conçus, développée avec ExtJs pour préciser.
Mon bug d'aujourd'hui : quand du texte avec apostrophe est enregistré en BDD, les apostrophes doublent.
Normalement quand on enregistre du texte avec apostrophe en bdd on doit faire ça pour éviter les erreurs sql :
$v = str_replace("'", "''", $v);
Cependant c'est cette ligne qui fait que les apostrophes doublent, quand j’enlève cette ligne sa marche nickel !
Le php exécute ensuite une procédure stockée SQL Server, voici l'extrait qui traite les données de type texte :
1 2 3 4 5 6 7 8 9 10
| begin transaction
-- Astuce pour récupérer une donnée text : créer une table temporaire
create table #ttTexte (Id int,Texte text)
insert into #ttTexte (Id,Texte) select 1,@sval
set @PDef = N'@pDate datetime'
set @SQL = 'update ' + @Col_Table_Nom + ' set ' + @Col_Colon_Nom +
'=Texte from #ttTexte WHERE Id = 1 and IdDate = @pDate '
execute sp_executesql @SQL, @PDef, @pDate = @idDate
drop table #ttTexte
end |
Je pense que c'est cette partie de code qui empêche qu'une apostrophe vienne causé des erreurs SQL.
Ma question est... pourquoi ? Le fait de mettre le texte dans une table temporaire avant l'insertion empêche les erreurs SQL dus aux apostrophes ?
Je ne comprend pas, quelqu'un pourrait-il m'expliquer ?
Après quelqu'un va me dire, "mais osef tant que sa marche!" Mais non.
J'aime bien comprendre comment ça marche et surtout apprendre Smiley smile
Merci d'avance !
Partager