-function query_echappe_textes($query) {
- static $codeEchappements = array("''" => "\x1@##@\x1", "\'" => "\x2@##@\x2", "\\\"" => "\x3@##@\x3");
- $query = str_replace(array_keys($codeEchappements), array_values($codeEchappements), $query);
- if (preg_match_all("/((['])[^']*(\\2))|(([\"])[^\"]*(\\5))/S", $query, $textes)) {
+function query_echappe_textes($query, $uniqid=null) {
+ static $codeEchappements = null;
+ if (is_null($codeEchappements)) {
+ if (is_null($uniqid)) {
+ $uniqid = uniqid();
+ }
+ $uniqid = substr(md5($uniqid), 0, 4);
+ $codeEchappements = ["\\\\" => "\x1@#{$uniqid}#@\x1", "\\'" => "\x2@#{$uniqid}#@\x2", '\\"' => "\x3@#{$uniqid}#@\x3"];
+ }
+ if ($query === null) {
+ return $codeEchappements;
+ }
+
+ // si la query contient deja des codes d'echappement on va s'emmeler les pinceaux et donc on ne touche a rien
+ // ce n'est pas un cas legitime
+ foreach ($codeEchappements as $codeEchappement) {
+ if (strpos($query, $codeEchappement) !== false) {
+ return [$query, []];
+ }
+ }
+
+ $query_echappees = str_replace(array_keys($codeEchappements), array_values($codeEchappements), $query);
+ if (preg_match_all("/('[^']*')|(\"[^\"]*\")/S", $query_echappees, $textes)) {