Version imprimable du sujet
Cliquez ici pour voir ce sujet dans son format original |
Forum TourDeJeu > Programmer > Une Petite Question |
Ecrit par: cocos Mardi 14 Décembre 2004 à 15h13 |
je voudrai stocker un objet dans une base mysql je le serialize,tout ce passe bien sauf si une des variables de l'objet de type string contient un ' ou un ",alors lorsque je veux récupérer l'objet il disparait apres un passage par unserialize. J'ai essayé de faire un urlencode avant de stocker l'objet dans la base de donnée mais ca change rien. quelqu'un aurait -il la solution? merci |
Ecrit par: Sybler Mardi 14 Décembre 2004 à 16h41 |
si tu prévois ajouter une donnée qui posède un ' ou un " ou autre, utilise: addslashes($msg) donc: $query = "INSERT INTO table (id,item) VALUE ('','" . $addslashes($msg) . "');"; et lorsque tu veux ravoir les infos: $query = "SELECT item FROM table WHERE id='1';"; $result = mysql_query($query); $row = mysql_fetch_row($result); $item = stripslashes($row[0]); |
Ecrit par: cocos Mardi 14 Décembre 2004 à 18h53 |
c'est ce que j'ai fait,mais je me demande si ca modifi pas la structure et ca fait que apres je ne peut plus deserialiser mon objet,d'ailleur ou placer le addslash? avant la sérialisation ou apres? |
Ecrit par: gorgu Mercredi 15 Décembre 2004 à 04h30 |
hum... etrange idée a froid je dirais que c'est pas possible... arrives tu as afficher une image correcte de l'objet dans un echo ? |
Ecrit par: Nonothehobbit Mercredi 15 Décembre 2004 à 13h49 |
le addslashes permet d'échapper les guillemets " afin qu'il n'y ait pas d'erreur lors de la requête Ex : Update truc set machin=""test de guillemet"" plantera, avec addslashes : Update truc set machin="\"test de guillement\"" Mais c'est uniquement pour le parser sql ! La chaîner rentrée restera intacte, à savoir : "test de guillement", sans les antislash. Vérifier par vous même dans la bdd. Donc inutile de faire un stripslashes à la récupération. Et votre objet ne sera jamais altéré. $requete = 'insert into table (item) values ("'.addslashes(serialize($item)).'")'; et pour la récup $query = "SELECT item FROM table WHERE id='1';"; $result = mysql_query($query); $row = mysql_fetch_row($result); $item= unserialize($row[0]); |
Ecrit par: cocos Mercredi 15 Décembre 2004 à 15h00 |
oui c'est bon j'ai réussit,c'est en effet le stripslash que je mettait qui fesait que ca bugguai. merci beaucoup |
Ecrit par: Sinclair Jeudi 16 Décembre 2004 à 11h55 |
Euh ... C'est quoi une BD serializée ? |
Ecrit par: gorgu Jeudi 16 Décembre 2004 à 15h09 |
alors là faut m'expliquer je suis trés trés interessé par cela... tu arrives a mettre dans une base un bojet avec ses propriétés et tout et tout? |
Ecrit par: Cedric Jeudi 16 Décembre 2004 à 16h27 |
Dans certains langages, il est possible de serializer des objets. Cela revient a transformer un objet en chaine de caracteres. J'imagine qu'une BD serializee c'est une BD qui stocke des objets serializes. Si c'est bien joli sur le papier, ce systeme n'a que vocation de stockage car il n'est pas question de faire de requetes sur les attributs de l'objet serialize (au contraire d'un objet stocke dans une base de donnees objet ou assimilee). |
Ecrit par: cocos Jeudi 16 Décembre 2004 à 18h48 | ||
pour ma part c'est un objet que je stock dans une base de donnée mysql et non pas une base de données sérialiser...
d'ailleur comment tu fait des requetes sur les attributs de l'objet?? |
Ecrit par: Magauss Jeudi 16 Décembre 2004 à 19h01 |
ça dépends de ta modélisation et de la façon dont tu stockes tes objets, tout ce que je peux dire c'est que ce sera un SELECT, pour le reste, n'ayant pas de détaisl sur ton modèle et sur ce que tu souhaites récupérer je ne pourrai rien dire. |