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
Réponse acceptée

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
Auteur
Réponse acceptée

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 !

Merci beaucoup pour ta réponse rapide et claire !

Je vais voir tout sa et je te redis ;)

De rien, ça fait toujours plaisir.