Tom: Einen Array in eine MySQL Datenbank speichern

Beitrag lesen

Hello,

ich würde gerne folgenden Query schreiben:
UPDATE tabelle SET variable=array[1]; variable2=array[2]
und ähnliches. Das funktioniert allerdings so nicht, kann ich das sinnvoll lösen, oder muss ich die einzelnen Elemente des Arrays erst in eine Variable schreiben?

Es gibt zwei Möglichkeiten:
1. Eine Schleife, die jedes Element des Arrays einem Feld der DB zuweist
   a. Im Array stehen nur Felder, die zur DB passen
   b. Nur Felder, die in der DB enthalten sind, sollen aus dem
      Array übernommen werden
2. Man muss einzelne Felder des Arrays in der DB niemals abfragen und
   daher auch nicht indizieren. Nach den Daten im Array wird niemals
   gesucht werden. Dann kann man das Array komplett abspeichern.

1a)
  function insert_rec($con, $table, $_data)
  {
    $sql = "insert into $table set \n";  # sql-Statement basteln

if(is_array($_data))
    foreach($_data as $key => $val)
    {
      if ($val === false)
      {
        $sql .= "$key = NULL,\n";
      }
      else
      {
        $sql .= "$key = '".mysql_escape_string($val)."',\n";
      }
    }
    else return false;

$sql = substr($sql,0,-2);   # letztes Komma und  \n wieder abschneiden.
    $ok = mysql_query($sql,$con); # Insert durchführen
    return $ok;
  }

Der Übergabeparameter $_data muss OHNE Escape-Backslashes sein!

2. oder die zweite Variante:

Excapes entfernen, falls vorhanden
Array mit serialize() einpacken.
Verpacktes Aray mit mysql_escape_string() escapen
Erhaltenenen Datenstream inserten

Nach dem SELECT:

  • "Anti-Escape" ist nicht notwendig, da die DB die Escapes nur für die
      API benötigt hat und nicht mit abspeichert!
  • Array mit unserialize auspacken
  • Mit den Daten arbeiten...

Viel Erfolg

Liebe Grüße aus http://www.braunschweig.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen