Stocker tableau en base de données

Par MattGrunts, il y a 11 ans


Bonjour, depuis quelques jours je me demande s'il est possible d'insérer un tableau en base de données sous cette forme (je sais que je pourrais faire des tests en local mais c'est pour avoir un avis, et pour savoir si ceci présente des failles de sécurité) :

Mon tableau correspond à ceci (c'est un exemple bien sur) :

$array = array( 'animal' => 'Chat', 'nom' => 'Poupou', 'age' => '4' ); <?php $select = $db->("SELECT array FROM test"); $content = $select->fetch(); echo 'C\'est un ' . $content['array']['animal']; echo '<br>'; echo 'Il se nomme ' . $content['array']['nom']; echo '<br>'; echo 'Et il a ' . $content['array']['age']; ?>

Merci d'avance pour vos réponses

4 réponses

skp, il y a 11 ans

Bonjour, oui c'est possible regarde les fonctions serialize et unserialize .
Pour les failles, je dirais qu'une fois sérialisé il n'y en a pas plus que pour une chaine de caractère normal.
Par contre attention, car si ton tableau vient à avoir un champ supplémentaire, par exemple "nombres de pattes", tes autres tableaux déjà sérialisés et stockés n'auront pas ce champ ce qui peut être une source d'erreur.

MattGrunts, il y a 11 ans

Merci beaucoup pour ta réponse rapide et claire !

Je vais voir tout sa et je te redis ;)

MattGrunts, il y a 11 ans

Bon alors, histoire d'aider les prochaines personnes qui voudront faire un script de la sorte, voici l'exemple :

Tout d'abord, on serialize nos valeurs, pour ceci on va créer un array avec quelques valeurs :

$array = array( 'nom' => 'Poupou', 'age' => '15' ); $serialize = serialize($array); //Debug pour voir ce que sa donne var_dump($serialize);

Le debug me donne sa : string 'a:2:{s:3:"nom";s:6:"Poupou";s:3:"age";s:2:"15";}' (length=48)

Alors on exclu ce qui ne sert à rien pour garder : a:2:{s:3:"nom";s:6:"Poupou";s:3:"age";s:2:"15";} (car ici je l'insère manuellement)

Et pour l'extraire :

$db = new PDO('mysql:host=;dbname=', '', ''); $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $select = $db->query('SELECT * FROM array'); $content = $select->fetch(); $array = unserialize($content['array']); //Debug var_dump($array); //On fait un test echo $array['nom']; echo $array['age'];

Merci pour ton aide skp !

skp, il y a 11 ans

De rien, ça fait toujours plaisir.