Il n'y a pas de bonne façon de stocker un tableau dans un seul champ.
Vous devez examiner vos données relationnelles et apporter les modifications appropriées à votre schéma. Voir l'exemple ci-dessous pour une référence à cette approche.
Si vous devez enregistrer le tableau dans un seul champ, les fonctions serialize()et unserialize()feront l'affaire. Mais vous ne pouvez pas effectuer de requêtes sur le contenu réel.
Comme alternative à la fonction de sérialisation, il existe également json_encode()et json_decode().
Considérez le tableau suivant
$a = array(
1 => array(
'a' => 1,
'b' => 2,
'c' => 3
),
2 => array(
'a' => 1,
'b' => 2,
'c' => 3
),
);
Pour l'enregistrer dans la base de données, vous devez créer une table comme celle-ci
$c = mysql_connect($server, $username, $password);
mysql_select_db('test');
$r = mysql_query(
'DROP TABLE IF EXISTS test');
$r = mysql_query(
'CREATE TABLE test (
id INTEGER UNSIGNED NOT NULL,
a INTEGER UNSIGNED NOT NULL,
b INTEGER UNSIGNED NOT NULL,
c INTEGER UNSIGNED NOT NULL,
PRIMARY KEY (id)
)');
Pour travailler avec les enregistrements, vous pouvez effectuer des requêtes comme celles-ci (et oui, c'est un exemple, méfiez-vous!)
function getTest() {
$ret = array();
$c = connect();
$query = 'SELECT * FROM test';
$r = mysql_query($query,$c);
while ($o = mysql_fetch_array($r,MYSQL_ASSOC)) {
$ret[array_shift($o)] = $o;
}
mysql_close($c);
return $ret;
}
function putTest($t) {
$c = connect();
foreach ($t as $k => $v) {
$query = "INSERT INTO test (id,".
implode(',',array_keys($v)).
") VALUES ($k,".
implode(',',$v).
")";
$r = mysql_query($query,$c);
}
mysql_close($c);
}
putTest($a);
$b = getTest();
La connect()fonction renvoie une ressource de connexion mysql
function connect() {
$c = mysql_connect($server, $username, $password);
mysql_select_db('test');
return $c;
}