2011-04-26 33 views
3

假设我们有一个带有“user”“siblings”字段的mysql表“table”,我们希望为每个用户存储这个系列信息。我可以插入一个PHP数组到一个单一的mysql记录字段?

是有可能做到这一点:

$user=35; 
$sibs=array("george","christina"); 

mysql_query("insert into table (user,siblings) values ('$user','$sibs')"); 

使场“兄弟姐妹”包含数组?

+0

请在发帖之前进行搜索。 http://stackoverflow.com/questions/2880276/php-mysql-array-insert-array-info-into-mysql – 2011-04-26 13:26:59

回答

3

你想使用PHP的serialize()功能。为了扭转这个过程中,使用unserialize()

SNIPPIT从PHP.net:

<?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.. */ 
    } 
} 
?> 
+0

我会试试这个,我不熟悉序列化说实话 – gianniskpf 2011-04-26 13:31:48

2

您可以使用序列化http://ru2.php.net/manual/en/function.serialize.php

但它是非常糟糕的做法。

+0

我通常更喜欢内爆,但在这种情况下,这比我给出的例子复杂得多,不会起作用 – gianniskpf 2011-04-26 13:27:22

+0

你可以说为什么'serialize'是坏习惯吗? – pavium 2011-04-26 13:27:29

+3

@pavium因为1)如果你需要存储key-val对,那么Mysql不是最好的选择2)如果将来你想要选择所有项目,谁拥有一个(或多个)属性,那么你会遇到很大的麻烦。 – Emmerman 2011-04-26 13:29:47

0

是的,你可以serialize()插入它之前的数组,或implode()它与你选择的某种分隔符为此,但我会建议你为每个用户 - >兄弟关系插入单独的行。

+0

我曾想过内爆,我通常使用它。但实际上我在这里给出的例子比我遇到的真正问题复杂得多。不知道序列化,我会给它一个 – gianniskpf 2011-04-26 13:31:21

+0

我相信你会得到一个更好的解决方案,比你只是发布你想解决的问题。 :) – Narf 2011-04-26 13:44:45

3

要建立从他refered也使用压缩以节省空间后@大卫厚德的回答(如果对你有用):

<?php 
mySerialize($obj) { 
    return base64_encode(gzcompress(serialize($obj))); 
} 

myUnserialize($txt) { 
    return unserialize(gzuncompress(base64_decode($txt))); 
} 
?> 
+0

我会加上这个应该是大卫的方法做的伎俩!谢谢! – gianniskpf 2011-04-26 13:33:33

2

您可以使用破灭()增加值之间的分隔。例如,您可以使用管道“|”

例如

$user=35; 
$sibs=array("george","christina"); 

$sibs1 = ''.implode('|',$sibs).'|'; 

mysql_query("insert into table (user,siblings) values ('$user','$sibs1')"); 

在提取数据库中的信息使用LIKE '%|$var|%'在查询中extaract精确值。例如|克里斯蒂娜|

相关问题