3 回答

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊
沒有好的方法可以將數(shù)組存儲(chǔ)到單個(gè)字段中。
您需要檢查您的關(guān)系數(shù)據(jù)并對(duì)模式進(jìn)行適當(dāng)?shù)母?。?qǐng)參閱下面的示例以獲取對(duì)此方法的參考。
如果必須將數(shù)組保存到單個(gè)字段中,則serialize()and unserialize()函數(shù)可以解決問題。但是您不能對(duì)實(shí)際內(nèi)容執(zhí)行查詢。
作為序列化功能的替代方法,還有 json_encode()和json_decode()。
考慮以下數(shù)組
$a = array(
1 => array(
'a' => 1,
'b' => 2,
'c' => 3
),
2 => array(
'a' => 1,
'b' => 2,
'c' => 3
),
);
要將其保存在數(shù)據(jù)庫中,您需要?jiǎng)?chuàng)建一個(gè)這樣的表
$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)
)');
要使用記錄,您可以執(zhí)行諸如此類的查詢(是的,請(qǐng)注意,請(qǐng)注意?。?/p>
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()函數(shù)返回一個(gè)mysql連接資源
function connect() {
$c = mysql_connect($server, $username, $password);
mysql_select_db('test');
return $c;
}

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個(gè)贊
通常,是的,序列化和反序列化是可行的方法。
但是,如果您的數(shù)據(jù)很簡(jiǎn)單,則另存為逗號(hào)分隔的字符串可能會(huì)更好地存儲(chǔ)空間。例如,如果您知道數(shù)組只是數(shù)字列表,則應(yīng)使用爆破/爆炸。1,2,3和之間的區(qū)別a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}。
如果不是,則在所有情況下都對(duì)工作進(jìn)行序列化和反序列化。
添加回答
舉報(bào)