begin process at 2012 05 30 17:01:35
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

[MySQLi] Caracteres speciaux ?!?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[MySQLi] Caracteres speciaux ?!?

jeudi 19 juin 2008 à 18:08:50 | [MySQLi] Caracteres speciaux ?!?

zeguizmo

Bonjour à tous !

J'ai un petit problème avec une requête là, ca fait deux heures que je suis dessus, et pas moyen de voir ce qui merdouille :)
Je fais des tests, et dans mes tests, je tape un peu n'importe quoi pour voir ce qui passe.

Symptômes :
Pour un champ texte tout con, limité à 64 caractères en base de données, j'entre 44 caractères :

)à'ç&é)"(ç_à&é"à'_&éà"'_é&à'"_éàç"_'àé"&'_)

Et la requête d'insertion de ce champ dans la base passe sans problème.

Le même champ texte, j'entre 57 caractères :
)à'ç&é)"(ç_à&é"à'_&éà"'_é&à'"_éàç"_'àé"&'_)àé"'_à'àé_"')

Ca merde.

Le code :

$mysqli = $this->db;
$puName = $mysqli->real_escape_string($this->getName());
$queryInsert = "INSERT INTO publisher (pu_name) VALUES ('$puName');
if ($mysqli->query($queryInsert) === false)
   throw new exceptionErrorDB(DB_UP,$queryInsert,__FILE__,__LINE__);

Vous l'aurez compris, je travaille dans la classe publisher et cette requete ajoute un éditeur à la base de données. Il n'y a aucun soucis entre le champ texte de mon formulaire et ce qui est renvoyé par getName(), c'est identique.

OUI, j'échappe bien les caractères spéciaux avec real_escape_string

Le driver MySQLi ne renvoie pas de message d'erreur !! ($mysqli->error == NULL !) par contre le sqlstate renvoie un code d'erreur : HY000 qui correspond a une erreur générique (on est avancé avec ca :) )

Le problème devient rééllement étrange lorsque j'observe les requêtes qui sont loggées.

Cette requete est la bonne requete :
INSERT INTO publisher (pu_name) VALUES (')à\'ç&é)\"(ç_à&é\"à\'_&éà\"\'_é&à\'\"_éàç\"_\'àé\"&\'_)');

Cette requête est la mauvaise requête :
INSERT INTO publisher (pu_name) VALUES (')à\'ç&é)\"(ç_à&é\"à\'_&éà\"\'_é&à\'\"_éàç\"_\'àé\"&\'_)àé\"\'_à\'àé_\"\')');


Elles semblent toutes les deux correctes, et pour cause, elles sont toutes les deux valides !!! Quand je les execute à la main, elles passent toutes les deux, mais en php, seule la première passe...

En résumé, dès que je flirte avec la limite de caractères, il semble impossible d'insérer un élément avec MySQLi :(

Je me suis dit que peut etre il comptait les \ dans le total de caractères, mais que nenni, lorsque j'insère 64 apostrophes ( simple quote ) il insère également 64 \ devant les apostrophes donc il y a 128 chars dans la requete, mais comme seulement 64 seront insérés, la requete passe comme une fleur ! Je n'y comprend rien du tout.

A tout les coups j'ai encore loupé un truc, mais quoi ? :(

Quelqu'un a une idée ?

Merci beaucoup et bonne fin de journée,

Guizmo

PS : si je ne suis pas clair dite le moi, je m'expliquerai autrement.
jeudi 19 juin 2008 à 18:12:01 | Re : [MySQLi] Caracteres speciaux ?!?

zeguizmo

( il manque un " dans l'exemple de code que je donne, pour terminer la requête, c'est le copié coller qui a mal tourné ... désolé )

ZeGuizmo
jeudi 19 juin 2008 à 22:34:36 | Re : [MySQLi] Caracteres speciaux ?!?

zeguizmo

Bon j'ai trouvé le problème, mais je n'ai pas de solutions.

Le problème est simple, je suis un idiot de ne pas y avoir pensé : il suffisait de penser à l'encodage. Ce ne sont pas les ' ou les " qui posent problème, mais les é, à et autres infâmes è ... Quand j'insère en base de données ils sont tous pourris (à'ç&é ..) a cause de l'UTF8, par contre il sortent bien sur l'affichage. Alors que mes requetes que je passe à la main son en clair dans la base de données, mais sortent très mal sur l'affichage. (a moins d'un utf8_decode).

Je ne comprend pas grand chose a ces histoires. Quand j'effectue une insertion en base de données avec MySQLi, c'est encodé en UTF8 (puisque je vois une bouillie de à ) mais je ne lui ai rien demandé moi a MySQLi, donc c'est qui qui fait cet encodage ? C'est parceque les tables sont au format UTF8-unicode ?
Dans ce cas pourquoi une requete à la main n'insère pas des données en UTF8 mais des données en clair ?
Et pourquoi quand j'ai une bouillie de à je peux récupérer mes enregistrements sans traitement alors que quand les données apparaissent en clair je dois réaliser un utf8_decode() ?
Cela m'amène à penser que les à correspondent a des données non encodées en utf8 et les données que je vois en clair sont en fait encodées en utf8 (puisque j'ai besoin d'un utf8 decode pour les récupérer). Dans ce cas, comment insérer les données en utf8 dans la base ?

Car moi ce qui m'interesse, c'est de voir mes données en clair dans la base, car ca résoudrait mon problème de longueur de champs (ben oui, si les lettres ressemblent toutes à des Ã'Ã le nombre de caractère inséré n'a plus grand chose a voir avec le nombre de caractères saisis par l'utilisateur !)

Merci de vos précieux eclaircissements !

Guizmo


Cette discussion est classée dans : requete, requête, passe, caractères, mysqli


Répondre à ce message

Sujets en rapport avec ce message

requete sql avec 2 shémas [ par didou8513 ] Bonjour, est-il possible de créer une requête sql avec 2 shémas sous une même instance oracle ? Mes paramètres de connexion sont différents pour chaqu requete d'insertion dans une base de donnée [ par kedieng ] Salut je suis Louis Fendji. J'ai écrit un petit script php pour insérer un nouvel enregistrement dans une base de donnée mais la requête ne s'exécute php et requete sql [ par ddyefre ] bonjour,un p'tit probleme... après l'execution de la requête ci dessous je voudrais recuperer tous les champs de la requête, c'est à dire nom et preno Requete UPDATE ? [ par nosfe2708 ] Bonjour, je voulais savoir si quand on appelle une requête UPDATE tel que : mysql_query("UPDATE table SET lu=1 WHERE id='$variable'"); Est ce que l'u Caractères interdit dans mdp [ par cseagle ] Bonjour,Je souhaite autoriser, à l'inscription de mon espace membre , pour le mot de passe que les caractères a-z A-Z 0-9 le . le _ et le -Voici ce qu récupération de valeurs grace à une requête [ par troupe_a_jule ] juleBonjour à tousJ'aimerai utilisé dans ma page php les valeus qui sont récupéré dans ma requête sans les afficher. Je fait ma requête, elle semble c requête select et variable [ par troupe_a_jule ] juleBonjour à tousJ'aimerai utilisé dans ma page php les valeus qui sont récupéré dans ma requête sans les afficher. Je fait ma requête, elle semble c vérifier si la requete renvoie bien une valeur [ par ssisssou ] Bonjour a tous. voila mon problème c'est que je veux a partir de l'information que renvoie une requête faire mon bout de code, je vous explique: ma re probléme requête [ par aureliemerlin ] Bonjour, Je voudrais faire une requête qui fait appel à trois table différente mais à chaque fois que j'execute ma requête j'ai un message d'erreur q resultat requete sql [ par djbabou ] Bonsoir a tous. Je pense que vous pourrez m'aider ! en fait, je cherche un moyen de récupérer le résultat d'une requête sql en php. Plus précisément,


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales