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