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岁就足够了,如果没有问题,我很满意。:-)它以数组的形式出现,但我收集到的数据没有序列化,我无法处理它。现在,我只是存储和检索字符串,如下所示。我需要学习如何更好地处理序列化。