IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Désérialiser un objet provenant d'une table MySQL


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 11
    Par défaut Désérialiser un objet provenant d'une table MySQL
    Bonjour à tous,

    Je suis vraiment bloqué sur un pb de sérialistation/désérialisation que j'utilise avec des sessions.

    1. Lorsque l'utilisateur se loggue, je crée un objet "user" (contenant ses infos pesonnelles).
    2. Je sérialise cet objet
    3. Je l'enregistre dans un champ de type "blob" de ma table MySQL avec l'id de la session.
    4. A l'ouverture d'une seconde page php, je récupére l'id de la session
    5. Je cherche l'enregistrement de ma session poru trouver mon objet sérialisé.
    6. Je voudrais désérialiser le contenu récupéré:

    Pour cela, je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $db = new PDO('mysql:host=localhost;dbname=sessions', 'root', '', array(PDO::ATTR_PERSISTENT => true)); 
          $getData = $db->prepare("SELECT dataobject FROM sessions AS Session WHERE Session.id = ?");
          $getData->bindParam(1, session_id());
          $getData->execute();    
          $allData = $getData->fetch(PDO::FETCH_ASSOC);
          $donnees = $allData['dataobject'];
          $client = unserialize($donnees);
    ?>
    Je récupere bien dans $donnees je chaine de caractères, mais quand je la passe dans dla fonction unserialize(), je n'ai plus rien, comme si il n'arrivait pas à la décoder.

    Pouvez-vous m'aider?
    Si vous avez besoin de plus de détails pour m'aider, n'hésitez pas à me demander.

    Merci !

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Que donne var_dump avant/après (respectivement de $donnees et $client) ?

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 11
    Par défaut
    Citation Envoyé par julp Voir le message
    Que donne var_dump avant/après (respectivement de $donnees et $client) ?
    Alors avant, j'ai NULL pour les 2 variables

    Apres, pour
    $donnees : j'ai l'objet sérialisé de cette forme : string(101) user|s:88:"O:4:"User":3:{s:3:"nom";s:2:"da";s:12:"�User�prenom";s:2:"da";s:9:"�User�tel";s:2:"23";}";"
    et
    $client : bool(false)

    Tout est normal non? Mis à par bien sur qu'il n'y a rien dans $client apres.

    Tu aurais une idée?
    merci pour ton aide

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Si unserialize échoue, ce qui est le cas ici puisque la valeur FALSE est retournée, vous devriez obtenir un message d'erreur (de type notice). Il faudrait donc forcer son affichage si nécessaire avant (avec error_reporting(E_ALL) par exemple).

    Il se pourrait que ce soit un problème d'encodage qui en soit à l'origine ...

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 11
    Par défaut
    En effet, j'ai une notice qui me dit :
    Notice: unserialize() [function.unserialize]: Error at offset 0 of 101 bytes in C:\Progr......

    Mais comment savoir si j'ai un pb à l'encodage?
    C'est vrai que j'ai des caractères bizzare dans qd je récupére mon champ "dataobject". J'ai des �. C'est peut etre pas normal?
    L'interclassement de mon champ est : latin1_swedish_ci

    Tu aurais une idée? Tu pense que je récupère pas ce qu'il faut?

  6. #6
    Membre habitué
    Inscrit en
    Juillet 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 11
    Par défaut
    J'essaye de désérialiser ca :

    user|s:88:"O:4:"User":3:{s:3:"nom";s:2:"da";s:12:"�User�prenom";s:2:"da";s:9:"�User�tel";s:2:"23";}";

Discussions similaires

  1. Es-ce possible de créer une table MySQL avec MS Excel
    Par pierrot10 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 16/10/2005, 06h30
  2. Vider une table MySQL suite à javascript:confirm()
    Par anutka dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 16/09/2005, 12h16
  3. Connaître le type d'un champs d'une table Mysql
    Par xoran dans le forum Langage SQL
    Réponses: 1
    Dernier message: 20/07/2005, 09h29
  4. Comment importer un document CSV dans une table MySql ?
    Par magic8392 dans le forum Requêtes
    Réponses: 6
    Dernier message: 04/02/2005, 11h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo