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 smile.gif

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
huh.gif

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. smile.gif

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 ... smurf.gif

C'est quoi une BD serializée ?

Ecrit par: gorgu Jeudi 16 Décembre 2004 à 15h09
alors là faut m'expliquer smile.gif

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...
QUOTE
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).

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.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)