将PHP数组存储在单个SQL单元中

时间:2012-07-20 08:38:40

标签: php mysql sql arrays

我希望在SQL数据库中将项目作为数组或类似数据类型存储,并且无法找到关于该主题的令人满意的信息

在PHP中,信息将存储为ingredient["$id"]=true or false,其中$ id表示成分

所以对于普通面包(请注意,这仍然是伪代码,因为数据输入端尚未启动)

//code that creates array this bit is still theory and will be manually emulated in the db for the time being
    $id=1;
    while (isset ($_POST["ingredient part of form".$ID])){
        if ($_POST["ingredient".$id]==checked){
            $p["ingredient"][$id]=true;
        }
        else{
            $p["ingredient"][$id]=false
        }
    $id++;
    }

//the code that gets the values back for the ingredient name we will use a separate array ingredient_n[$id]
echo p[$prod_id]["item"].': '
$id=1
while (isset ($ingredient[$id])){
    if ($p[$prod_id]["ingredient"][$id]==true)
        if ($id!=1){
            echo ', ';
        }
        echo $ingredient_n[$id];
    }
}
echo '.';

这应该产生类似

的东西

'普通面包:小麦面粉,水,盐,酵母。'

我查看了ENUM和SET,但这样会更难添加新成分

2 个答案:

答案 0 :(得分:14)

根据主题判断(将PHP数组存储在单个SQL单元中),您应该将其序列化。有标准化的方法

$array["a"] = "Hello";
$array["b"] = "World";
$array["c"] = "!";

$str = serialize($array);

// The contents of $str
// a:3:{s:1:"a";s:5:"Hello";s:1:"b";s:5:"World";s:1:"c";s:1:"!";}

反向使用反序列化

$unserializedString = unserialize($str);

您可以将它用于数组和对象。

答案 1 :(得分:5)

  

如果在我的SQL数据库中作为数组或类似数据类型的项目无法找到关于该主题的令人满意的信息,我希望存储成分

如果序列化数据是面向数据库的问题的答案,那么您可能会提出错误的问题。 Normalise您的数据库,您可能会将成分插入到单独的表中,使用JOIN来检索它们。这使您的数据库更易于使用,更易于搜索和更易于维护。

那说;在某些情况下,存储序列化字符串实际上是最可行的解决方案,但这种情况似乎并非如此。