PHP/MYSQL 数组存储和检索问题
Posted
技术标签:
【中文标题】PHP/MYSQL 数组存储和检索问题【英文标题】:PHP/MYSQL array storing and retrieval issue 【发布时间】:2012-04-20 09:32:49 【问题描述】:我想在字段中存储短数组。 (我意识到有理由将数组分解为项目并单独存储,但我选择了一个简单的存储选项,代价是功能较少。)
我创建数组的代码如下:
$str = "one,two,three,four";
$array = explode (",",$str)
然后我使用插入语句将其存储到 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"
//到目前为止一切顺利。但是,当我尝试打印出数组的内容时,会收到错误消息。我尝试过使用 implode 以及每个。
$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 中的条目可能不是正确的数组吗?问题可能是什么?感谢您的任何建议。
【问题讨论】:
编辑 - 这似乎是你问题的答案 - ***.com/questions/1978438/save-php-array-to-mysql 当你print_r($array)
时会发生什么?
【参考方案1】:
以这种方式存储数组的常用方法是serialize输入前的数据,并在检索时unserialize。
$array = array('one', 'two', 'three', 'four');
$stringToStore = serialize($array);
稍后:
while($row = mysql_fetch_array($res))
$array = unserialize($row['list']);
var_dump($array);
【讨论】:
它作为一个数组进入,但我没有序列化就收集了它,这不是我可以使用的。现在,我只是按照下面的答案存储和检索了字符串。我需要学习更好地处理序列化。【参考方案2】:如果你的数组字符串如下,我认为你可以使用serialize 和(如果你不使用序列化)
$str = "one,two,three,four";
那么为什么在将其插入数据库之前将其设为数组,我认为您可以直接插入字符串,当您需要将字符串用作数组时,您可以简单地从数据库中检索字符串并将其设为数组使用explode like
while($row = mysql_fetch_array($res))
$array = explode(",", $row['list']); // "one,two,three,four"
echo $array[0]; // one
【讨论】:
谢谢,这成功了。我不能投票给你,因为我没有足够的分数,但这是要走的路……没有必要在这里去一个数组,因为字符串包含相同的信息。 不客气,我能理解你投票给我的局限性,但可能 15 人就足够投票了,如果不是那么没问题,我很满意。 :-)【参考方案3】:您插入的不是数组,而是 PHP 将您的数组评估为字符串形式的内容。要在 MySQL 中存储数组而不正确规范化数据,您需要对其进行序列化。基本上你会想做这样的事情:
$serialized = implode(',', $arrayToStore);
然后将其存储在 MySQL 中。在它的路上,你会做:
$unserialized = explode(',', $arrayFromMySQL);
【讨论】:
以上是关于PHP/MYSQL 数组存储和检索问题的主要内容,如果未能解决你的问题,请参考以下文章
如何通过匹配(字符串到数组和数组到数组)从mysql存储和检索数组数据我在从mysql获取数据时遇到问题
(Swift) 将数组存储和检索到 NSUserDefaults