【问题标题】:PHP/MYSQL array storing and retrieval issuePHP/MYSQL 数组存储和检索问题
【发布时间】: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 中的条目可能不是正确的数组吗?问题可能是什么?感谢您的任何建议。

【问题讨论】:

标签: php mysql arrays


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 2019-07-18
    • 2013-11-02
    相关资源
    最近更新 更多