Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/MYSQL数组存储和检索问题_Php_Mysql_Arrays - Fatal编程技术网

PHP/MYSQL数组存储和检索问题

PHP/MYSQL数组存储和检索问题,php,mysql,arrays,Php,Mysql,Arrays,我想在字段中存储短数组。(我意识到有理由将阵列拆分为多个项目并单独存储,但我选择了一个简单的存储选项,而牺牲了较少的功能。) 我创建数组的代码如下所示: $str = "one,two,three,four"; $array = explode (",",$str) 然后,我使用insert语句将其存储到mysql中的一个文本字段中,该语句似乎存储得很好。在PhPAdmin中,它在字段中显示数组,如果我只是回显$ARRAY,它将打印“ARRAY” 问题发生在我尝试检索数据时 我正在使用 whi

我想在字段中存储短数组。(我意识到有理由将阵列拆分为多个项目并单独存储,但我选择了一个简单的存储选项,而牺牲了较少的功能。)

我创建数组的代码如下所示:

$str = "one,two,three,four";
$array = explode (",",$str)
然后,我使用insert语句将其存储到mysql中的一个文本字段中,该语句似乎存储得很好。在PhPAdmin中,它在字段中显示数组,如果我只是回显$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

}

数据库中的条目可能不是正确的数组吗?有什么问题吗?谢谢您的建议。

您插入的不是数组,而是PHP评估为字符串形式的数组。要在MySQL中存储数组而不正确地规范化数据,需要对其进行序列化。基本上你会想做一些事情,比如:

$serialized = implode(',', $arrayToStore);
然后将其存储在MySQL中。在它离开时,您将执行以下操作:

$unserialized = explode(',', $arrayFromMySQL);
我认为如果数组字符串如下所示,则可以使用and(如果不使用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

以这种方式存储数组的通常方法是在输入数据之前对其进行处理,然后在检索时对其进行处理

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

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

编辑-这里似乎是你问题的答案-当你打印($array)时会发生什么?谢谢,这就成功了。我无法向上投票给你,因为我没有足够的分数,但这是一种方式…没有必要在这里使用数组,因为字符串包含相同的信息。欢迎你,我可以理解你投票给我的限制,但可能15岁就足够了,如果没有问题,我很满意。:-)它以数组的形式出现,但我收集到的数据没有序列化,我无法处理它。现在,我只是存储和检索字符串,如下所示。我需要学习如何更好地处理序列化。