Det finns inget bra sätt att lagra en array i ett enda fält.
Du måste undersöka dina relationsdata och göra lämpliga ändringar i ditt schema. Se exempel nedan för en referens till detta tillvägagångssätt.
Om du måste spara arrayen i ett enda fält och sedan serialize()
och unserialize()
funktioner kommer att göra susen. Men du kan inte utföra frågor om det faktiska innehållet.
Som ett alternativ till serialiseringsfunktionen finns det också json_encode( )
och json_decode()
.
Tänk på följande array
$a = array(
1 => array(
'a' => 1,
'b' => 2,
'c' => 3
),
2 => array(
'a' => 1,
'b' => 2,
'c' => 3
),
);
För att spara den i databasen måste du skapa en sådan tabell
$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)
)');
För att arbeta med posterna kan du utföra frågor som dessa (och ja, det här är ett exempel, se upp!)
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();
connect()
funktion returnerar en mysql-anslutningsresurs
function connect() {
$c = mysql_connect($server, $username, $password);
mysql_select_db('test');
return $c;
}