8 Stimmen

Speichern eines PHP-Arrays in einer einzigen SQL-Zelle

Ich möchte die Inhaltsstoffe eines Artikels als Array oder ähnlichen Datentyp in meiner SQL-Datenbank speichern und kann keine zufriedenstellenden Informationen zu diesem Thema finden

In PHP werden die Informationen gespeichert als ingredient["$id"]=true or false wobei $id eine Zutat darstellt

Also für einfaches Brot (bitte beachten Sie, dass dies größtenteils noch Pseudocode ist, da mit der Dateneingabe noch nicht begonnen wurde)

//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 '.';

Dies sollte etwa Folgendes ergeben

EINFACHES BROT: WEIZENMEHL, WASSER, SALZ, HEFE.

Ich habe mir ENUM und SET angesehen, aber das würde das Hinzufügen neuer Zutaten erschweren.

16voto

Eric Herlitz Punkte 23781

Nach dem Thema zu urteilen (Speichern eines PHP-Arrays in einer einzigen SQL-Zelle) sollten Sie dies serialisieren. Dafür gibt es standardisierte Methoden

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

Zum Umkehren verwenden Sie unserialize

$unserializedString = unserialize($str);

Sie können dies sowohl für Arrays als auch für Objekte verwenden.

5voto

Berry Langerak Punkte 17907

Ich möchte die Inhaltsstoffe eines Artikels als Array oder ähnlichen Datentyp in meiner SQL-Datenbank speichern und kann keine zufriedenstellenden Informationen zu diesem Thema finden

Wenn die Serialisierung von Daten die Antwort auf eine datenbankorientierte Frage ist, ist es wahrscheinlich, dass Sie die falsche Frage stellen. Normalisieren Sie Ihre Datenbank, und Sie werden wahrscheinlich die Zutaten in eine separate Tabelle einfügen und einen JOIN verwenden, um sie abzurufen. Dadurch wird Ihre Datenbank einfacher zu benutzen, besser durchsuchbar und leichter zu pflegen.

Abgesehen davon gibt es Fälle, in denen die Speicherung einer serialisierten Zeichenfolge tatsächlich die praktikabelste Lösung ist, aber das scheint hier nicht der Fall zu sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X