Il n'y a pas de bon moyen 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 enregistrez le tableau dans un seul champ puis le serialize()
et unserialize()
les fonctions 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 telles que 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();
Le connect()
la fonction renvoie une ressource de connexion mysql
function connect() {
$c = mysql_connect($server, $username, $password);
mysql_select_db('test');
return $c;
}