Nettoyer une requête SQL

Fermé
hypo - 25 mai 2020 à 11:57
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 25 mai 2020 à 14:02
Bonjour,



Je bloque depuis 8h sur un problème d'encodage d'une requête SQL

Je dois échapper des caractères type https://www.unicodepedia.com/unicode/latin-1-supplement/85/control-0085/ qui une fois dans ma requête deviennent : … et font échouer la commande.

Le soucis c'est que l'encodage des caractères en question est aléatoire alors j'ai tenté par exemple:

$encode = mb_detect_encoding($vals)
$vals = mb_convert_encoding($vals, 'HTML-ENTITIES', $encode);


Le vrais soucis c'est que PDO ne sais pas exclure ces caractères (meme avec les bindparam etc), j'ai donc aussi essayer msqli_real_escape_string mais sans succès non plus.

et la j'ai plus d'idées..

Quelqu'un a déjà eu ce cas de figure ?

Merci d'avance pour votre aide.
A voir également:

3 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
25 mai 2020 à 13:13
Bonjour
Quel charset as-tu défini dans la connexion à ta BDD en PDO ?
Quel est l'encodage de ta base de données et de la table en question ?

Comment as-tu écrit ton code pour exécuter cette requête ?

1
'mysql:host=localhost;dbname=metasbooks;charset=utf8',

sinon l'encodage c'est latin1_general_ci, et la requette pour le moment c'est:

$sql = 'INSERT INTO metas ('. $cols .') VALUES ('. $vals .')';
$req = $bd->prepare($sql);
$req->execute();


exemple de requete complete:
'INSERT INTO metas (ean, url_image, description) VALUES ('9782035856463','https://metasbooks.fr/api/images/988fe77376df8fdd266ccc1897e4c4b5-9782035856463.jpg','Des recettes de desserts fondants et mousseux: tiramisu, cheesecakes, panna cotta…; et des pas-à-pas illustrés pour apprendre à réaliser une meringue italienne ou une meringue française. Régalez-vous!'

sachant que j'escape les caractères en question dans un str_replace plutôt dans le code en attendant de trouver mieux.

Je vais voir pour cette histoire d'encodage dans PDO, merci.
0
Ok il a fallu just changer l'encodage de la base en utf8. Merci pour le coups de pouce !
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
25 mai 2020 à 14:01
et au passage, corrige ta requête ( quitte à utiliser les requêtes préparées...autant bien le faire)
$sql = 'INSERT INTO metas ('. $cols .') VALUES ('. $vals .')';
$req = $bd->prepare($sql);
$req->execute();


Il faudrait récupérer chaque "$vals" et les mettre dans un array
et passer cet array dans le execute
comme dans l'exemple présent ici :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
25 mai 2020 à 14:02
0