Dominik: Einen Array in eine MySQL Datenbank speichern

Hallo,

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?

  1. 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