Arrays in einer Datenbank

Sniff

Mitglied
Wenn ich eine Variable mit mehreren Arrays in einem Feld in einer Db speichern will. Wie kann ich die naher auslesen? oder geht das über haupt?
 
Es geht schon, ist aber IMHO nicht wirklich empfehlenswert, da man die Werte im Array nicht in die WHERE-Clause einer Abfrage einbeziehen kann.

Beispiel aus PHP:
PHP:
$array = array( "a", "b", "c", 4, 5 );
$result = pg_exec( $pg_conn, "INSERT INTO table VALUES( '".serialize( $array )."'" );

Damit wird dann in die Table table der Array geschrieben...

Imho nicht empfehlenswert.

Gruss
Alki
 
Ich finde es schon sehr interessant Arryas in einer Datenbank zu speichern. Ein Array ist viel leichter und bequemer zu ändern als die Anzahl der Spalten einer Datenbank. Ich glaube dass so manches Problem mit Arrays realtiv einfach zu lösen ist.
Jetzt verstehe ich aber leider deinen Code nicht Alki. Kann ich das nicht ganz einfach mit mysql_query() machen? Und iwe genau rufe ich das wieder ab? Mit mysql_fetch_row() als mehrdimensionales Array? Ist ein wenig zu kompliziert und damit fehleranfällig. Wie geht es am einfachsten?
 
Nein, du bekommst den Array aus der DB als String zurück, den musst du dann per unserialize() wieder in einen Array umwandeln.

Wie gesagt - für die Datenbank ist der umgewandelte Array nichts als ein Varchar oder Text, du kannst das Array dann nicht in das SQL-Statement zum Suchen oder dergleichen Verwenden.

Von daher wäre von dieser Lösung eher abzuraten.

Alki
 
Wenn ich die DB nach dem Inhalt des Arrays durchsuchen will kann ich diese Methode natürlich nicht hernehmen. Aber z.B. für ein Voting oder so was geht das sicher gut. Insbesondere wenn ich das ändern des eigenen Votes ermöglichen möchte.
Oder bei einem Skript mit dem man sich für einen Clanwar eintragen kann. Da ist das auch eine interessante Idee.
 
hi,

alki wäre super nett wenn du zu dem unserialize() auch ein beispiel schreiben könntest. ich häng da nämlich gerade und bekomm mein array nicht vernünftig aus der db ausgelesen.

danek scho0n mal im vorraus
 
Eine "primitive" Variante für einfache, eindimensionale Arrays wäre, die Array-Elemente vor dem Speichern mittels implode() zusammenzusetzen und nach dem Auslesen mit explode() wieder in ein Array zu zerhacken.
PHP:
$meinArray = array("Hallo", "Welt", "wie gehts denn so");
mysql_query("INSERT INTO table SET meinarray = '" . implode("|", $meinArray) . "'", $con);

$rst = mysql_query("SELECT meinarray FROM table WHERE meinarray LIKE '%Hallo|Welt%'", $con);
$row = mysql_fetch_row($rst);
$meinArray = explode("|", $row[0]);
Den Vorteil, dass man dann nach Textteilen suchen kann, erkauft man sich allerdings teuer: Funktioniert (in dieser Einfachheit) wie gesagt nur mit eindimensionalen, numerischen (nicht-assoziativen) Arrays und man sollte unbedingt ein Trennzeichen wählen, das garantiert in den Array-Elementen nicht enthalten sein kann (sollte im Code abgeprüft werden), sonst hat man nach dem Auslesen ein paar Elemente mehr ;). Außerdem muss der Datentyp des Tabellenfeldes so gewählt werden, dass auch das längste mögliche Array als zusammengesetzter String noch reinpasst (in MySQL beispielsweise LONGTEXT).

Grüße,
Martin
 
Original geschrieben von fabphp
hi,

alki wäre super nett wenn du zu dem unserialize() auch ein beispiel schreiben könntest. ich häng da nämlich gerade und bekomm mein array nicht vernünftig aus der db ausgelesen.

danek scho0n mal im vorraus

Wo ist denn das Problem? [phpf]serialize[/phpf] konvertiert ein Objekt oder ein Array in einen String und [phpf]unserialize[/phpf] konvertiert den String wieder zurück in ein Array oder Objekt.
PHP:
$ar = Array(1,2,3,4,5,6);
$str = serialize($ar);
$ar2 = unserialize($str);
print_r($ar2);

Nur, dass Du in Deinem Fall den Wert aus der Datenbank der Funktion unserialize übergibst.

snuu
 
ich weiss es auch nicht, war wahrswcheinlich nur irgendein kleiner fehler.
hab das ganze jetzt mit einzelnen variablen gelöst die dann in ein string geschrieben und dieser dann meine werte ausgibt. ist zwar überhaupt nicht schön aber es funktioniert einigermaßen.
ich hab nicht nur ein solches array sondern viele. pro zeile in meiner ausgabetablle eins mit 6 möglichen inhalten.

und die variante von dir müsste mir ja mindestens das erste auspucken oder? hatte es aber nicht, deshalb bin davon wieder ab.
falls jemand doch noch nen tip hat wäre ich sehr dankbar.
fab
 

Neue Beiträge

Zurück