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 :

Sauvegarder un objet en base de données


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 65
    Par défaut Sauvegarder un objet en base de données
    Bonjour,
    Je souhaite insérer une chaine de caractères dans une base de données.
    Je dispose d'un objet $atout, j'utilise la technique de sérialisation afin de le passer en chaine de caractères.

    Ma chaine:
    1O:10:"AtoutClass":5:{s:2:"id";i:24;s:9:"nom_Atout";s:18:"Jambiere du dragon";s:13:"score_defence";s:2:"75";s:14:"partie_du_Corp";s:6:"jambes";s:8:"id_perso";i:1;} O:10:"AtoutClass":5:{s:2:"id";i:21;s:9:"nom_Atout";s:18:"Armure du champion";s:13:"score_defence";s:2:"60";s:14:"partie_du_Corp";s:5:"torse";s:8:"id_perso";i:1;} O:10:"AtoutClass":5:{s:2:"id";i:25;s:9:"nom_Atout";s:16:"casque du dragon";s:13:"score_defence";s:2:"35";s:14:"partie_du_Corp";s:4:"tete";s:8:"id_perso";i:1;}
    Je souhaite l’insérer via une requête sql dans ma table personnages, je pense que le faite que ma chaine dispose de plusieurs guillemets ceci doit faire un conflit lors de l'insertion.
    Ma requête:
    $bdd->query('update personnages set tabAtout = "'.$chaineImplode.'" where id = 1 ') or die (mysql_error());
    l'erreur
    Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AtoutClass":5:{s:2:"id";i:24;s:9:"nom_Atout";s:18:"Jambiere du dragon";s:13:"sco' at line 1' in C:\xampp\htdocs\test\JeuxCombat\Class\AtoutClass.php:143
    Dans ma table, le champ tabAtout est de type texte.
    J'ai effectué de nombreuses recherches mais je n'arrive pas à trouver de solutions...
    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonsoir,

    Vu que tu utilises PDO, pour éviter ce genre de souci, il faut que tu prépares ta requête, tu lui attaches les données variables et ensuite que tu l'éxécutes.

    Un peu de lecture avec des exemples : ici

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 65
    Par défaut
    Merci de me répondre aussi vite.
    J'ai déjà essayer la technique de préparé la requête, aucune erreur n'est générée cependant aucune insertion n'est faite.

    La requête:

    $req = $bdd->prepare('update `personnages` set tabAtout = :chaine where id = 1 ') ;
    $req->bindValue(":chaine", $chaineImplode );
    $req->execute();
    J'ai aussi essayé avec des guillemets autours des :chaine. Toujours sans effet

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Avec les objets serialisés, le plus simple c'est de sortir l'artillerie lourde : base64_encode() et son pendant base64_decode().
    Tu encodes avant d'insérer et tu décodes en sortie.
    la raison est simple : la serialisation ne te met pas l'abri de la présence des caractères exotiques.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 65
    Par défaut
    Parfait, merci de ton aide

Discussions similaires

  1. [débutant] sauvegarder "/www" et ses bases de données SQL
    Par marveljojo75 dans le forum Ubuntu
    Réponses: 11
    Dernier message: 09/09/2008, 21h21
  2. Réponses: 9
    Dernier message: 13/09/2007, 17h29
  3. Que choisir pour gérer les sauvegardes : fichiers XML ou base de données ?
    Par Invité dans le forum Développement 2D, 3D et Jeux
    Réponses: 11
    Dernier message: 14/06/2007, 11h58
  4. Transformer Objets en Base de données
    Par vain_mich dans le forum JDBC
    Réponses: 2
    Dernier message: 14/05/2007, 09h27
  5. Réponses: 1
    Dernier message: 30/01/2007, 14h07

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