Không có tốt cách lưu trữ một mảng vào một trường duy nhất.
Bạn cần kiểm tra dữ liệu quan hệ của mình và thực hiện các thay đổi thích hợp cho giản đồ của mình. Xem ví dụ bên dưới để tham khảo cách tiếp cận này.
Nếu bạn phải lưu mảng vào một trường duy nhất rồi đến serialize()
và unserialize()
các chức năng sẽ thực hiện thủ thuật. Nhưng bạn không thể thực hiện các truy vấn về nội dung thực tế.
Để thay thế cho chức năng tuần tự hóa, còn có json_encode()
và json_decode()
.
Hãy xem xét mảng sau
$a = array(
1 => array(
'a' => 1,
'b' => 2,
'c' => 3
),
2 => array(
'a' => 1,
'b' => 2,
'c' => 3
),
);
Để lưu nó trong cơ sở dữ liệu, bạn cần tạo một bảng như thế này
$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)
)');
Để làm việc với các bản ghi, bạn có thể thực hiện các truy vấn như sau (và vâng, đây là một ví dụ, hãy cẩn thận!)
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()
hàm trả về tài nguyên kết nối mysql
function connect() {
$c = mysql_connect($server, $username, $password);
mysql_select_db('test');
return $c;
}