假设我们有一个mysql表“table”,其字段为“user”“siblings”,我们希望为每个用户存储此系列信息。
是否可以这样做:
$user=35;
$sibs=array("george","christina");
mysql_query("insert into table (user,siblings) values ('$user','$sibs')");
所以字段“siblings”包含一个数组?
答案 0 :(得分:3)
您希望使用PHP的serialize()功能。要撤消此过程,请使用unserialize()
来自PHP.net的Snippit:
<?php
// $session_data contains a multi-dimensional array with session
// information for the current user. We use serialize() to store
// it in a database at the end of the request.
$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn,
"UPDATE sessions SET data = ? WHERE id = ?");
$sqldata = array (serialize($session_data), $_SERVER['PHP_AUTH_USER']);
if (!odbc_execute($stmt, $sqldata)) {
$stmt = odbc_prepare($conn,
"INSERT INTO sessions (id, data) VALUES(?, ?)");
if (!odbc_execute($stmt, $sqldata)) {
/* Something went wrong.. */
}
}
?>
答案 1 :(得分:3)
建立在@David Houde的回答中他提到的帖子也使用压缩来节省空间(如果对你有用):
<?php
mySerialize( $obj ) {
return base64_encode(gzcompress(serialize($obj)));
}
myUnserialize( $txt ) {
return unserialize(gzuncompress(base64_decode($txt)));
}
?>
答案 2 :(得分:2)
您可以使用序列化http://ru2.php.net/manual/en/function.serialize.php
但这真的很糟糕。
答案 3 :(得分:2)
您可以使用implode()在值之间添加分隔符。例如,您可以使用管道“|”
e.g。
$user=35;
$sibs=array("george","christina");
$sibs1 = ''.implode('|',$sibs).'|';
mysql_query("insert into table (user,siblings) values ('$user','$sibs1')");
从数据库中提取信息时,请在查询中使用LIKE '%|$var|%'
来提取确切的值。例如|克里斯蒂娜|
答案 4 :(得分:0)
是的,您可以在插入之前serialize()
数组,或implode()
使用您选择的某种分隔符,但我建议您只为每个用户插入单独的行 - &gt;兄弟关系。