8

項目が配列または同様のデータ型として 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を調べましたが、それは新しい成分を追加するのを難しくします

4

2 に答える 2

16

トピック (単一の SQL セルに PHP 配列を格納する) から判断すると、これをシリアル化する必要があります。そのための標準化された方法があります

$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:"!";}

逆に使用するには unserialize

$unserializedString = unserialize($str);

これは、配列とオブジェクトの両方に使用できます。

于 2012-07-20T08:40:06.013 に答える
5

アイテムが配列または同様のデータ型として SQL データベースに格納され、件名に関する満足のいく情報が見つからない場合に、成分を保存したい

データのシリアル化がデータベース指向の質問に対する答えである場合、間違った質問をしている可能性があります。データベースを正規化すると、成分を別のテーブルに挿入し、JOIN を使用して成分を取得することになるでしょう。これにより、データベースが使いやすくなり、検索しやすくなり、保守しやすくなります。

そうは言っても; シリアル化された文字列を保存することが実際には最も実行可能な解決策である場合がありますが、これはそうではないようです。

于 2012-07-20T08:45:41.927 に答える