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 référence à cette approche.
Si vous devez enregistrer le tableau en une seule zone, l' serialize()
et unserialize()
fonctions fera l'affaire. Mais vous ne pouvez pas effectuer des requêtes sur le contenu réel.
Comme une alternative à la fonction de sérialisation il est également json_encode()
et json_decode()
.
Considérons 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 un tableau comme ceci
$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)
)');
Travailler avec les enregistrements que vous pouvez exécuter des requêtes telles que la ces (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();
L' connect()
fonction retourne une ressource de connexion mysql
function connect() {
$c = mysql_connect($server, $username, $password);
mysql_select_db('test');
return $c;
}