2012-04-06 50 views
2

我想在一个字段中存储短阵列。 (我意识到有理由将阵列分成物品和单独存储,但我选择了一个简单的存储选项,但牺牲了较少的功能)。PHP/MYSQL数组存储和检索问题

我的代码创建阵列如下:

$str = "one,two,three,four"; 
$array = explode (",",$str) 

然后,我使用insert语句将其存储到mysql的文本字段中似乎存储正常。在PhPAdmin中,它显示字段中的ARRAY,如果我只是回显$ array,它将打印“ARRAY”。

当我尝试检索数据时发生问题。

我使用

while($row = mysql_fetch_array($res)) { 
$array = $row['list']; //that's the field it is stored in 
echo $array; // echoes "ARRAY" 

//到目前为止好检索。但是,当我尝试打印出数组的内容时,我收到错误消息。我已经尝试过使用内存,也为每个。

$text = implode(",", $array);//yields error message improper argument in implode function 
foreach($array as $val) { 
    echo $val; 
} //yields error message improper argument for for each statement 

} 

我在dbase中的入口是不是一个合适的数组?问题是什么?感谢您的任何建议。

+0

编辑 - 这里似乎在于一个回答你的问题 - http://stackoverflow.com/questions/1978438/save-php-array-to-mysql – 2012-04-06 20:44:00

+0

当你print_r($ array)'会发生什么? – 2012-04-06 20:44:38

回答

0

我认为你可以使用serialize也(如果你不使用序列化),如果你的阵列字符串如下

$str = "one,two,three,four"; 

那么为什么在将数组插入到数据库之前,我们可以直接插入字符串,并且当您需要将字符串用作数组时,您可以简单地从数据库中检索字符串,并使用爆炸类似于

while($row = mysql_fetch_array($res)) { 
$array = explode(",", $row['list']); // "one,two,three,four" 
echo $array[0]; // one 
+0

谢谢,这个伎俩。我无法赞成你,因为我没有足够的分数,但这是要走的路......因为字符串包含相同的信息,所以在这里没有真正需要去数组。 – user1260310 2012-04-06 21:21:56

+0

不客气,我可以理解你投票给我的限制,但可能是15投票,如果它不是没有问题,我很满意。 :-) – 2012-04-06 21:29:47

1

你插入的内容不是一个数组,只是PHP已经将你的数组评估为字符串形式。要在MySQL中存储数组而不正确地标准化数据,您需要序列化它。基本上你会想做类似的事情:

$serialized = implode(',', $arrayToStore); 

然后将其存储在MySQL中。在它的出路,那么你就这样做:

$unserialized = explode(',', $arrayFromMySQL); 
2

以这种方式存储数组的常用方法是输入前的数据为serialize,检索时为unserialize

$array = array('one', 'two', 'three', 'four'); 
$stringToStore = serialize($array); 

后来:

while($row = mysql_fetch_array($res)) { 
    $array = unserialize($row['list']); 
    var_dump($array); 
} 
+0

它作为一个数组进入,但我没有序列化收集,这不是我可以使用的东西。现在,我只是在下面的答案中存储和检索字符串。我需要学习更好地处理序列化。 – user1260310 2012-04-06 21:27:07