PHP-Funktionen - ausprobiertpg_insert()
Um mit dieser Funktion zu experimentieren, werden die Arrays und die Datenbanktabelle, die auf der Seite pg_convert definiert wurden, vorausgesetzt. pg_insert() schreibt die Werte aus einem assoziativen Array in die korrespondierende Datenbanktabelle.
bool pg_insert ( resource connection, string table_name, array assoc_array [, int options])
eindimensionale Arrays
Nach dem Aufruf von
$convarr = pg_insert($conn, 'obst', $obstarr);
mit unseren Argumenten sind die Daten aus dem Array $obstarr in die Tabelle obst übernommen worden, wie man mit einem SELECT leicht feststellen kann.
phptest=# select * from obst;
sorte | region | haendler | preis
-------+----------+------------------+-------
apfel | bodensee | Kurt's Obstladen | 1.25
(1 row)
Wenn Sie anstatt dem Originalarray $obstarr das konvertierte Array $convarr mit pg_insert() in die Tabelle einfügen, stehen die Arrayelemente mit zusätzlichen Hochkommata in der Tabelle.
sorte | region | haendler | preis
---------+------------+---------------------+-------
apfel | bodensee | Kurt's Obstladen | 1.25
'apfel' | 'bodensee' | 'Kurt''s Obstladen' | 1.25
Was passiert nun, wenn das Array weniger Elemente hat als die Tabelle? (Oder auch die Tabelle mehr Felder hat als das Array Elemente)
$zuklein = array ("sorte" => "birne",
"region" => "Südtirol",
"haendler" => "Obst&Gemüse");
pg_insert($conn,'obst',$zuklein);
sorte | region | haendler | preis
-------+----------+------------------+-------
apfel | bodensee | Kurt's Obstladen | 1.25
birne | Südtirol | Obst&Gemüse |
Die Daten aus dem Array werden eingefügt und das Feld in der Tabelle, für das es kein Arrayelement gibt, bleibt einfach leer
Umgekehrt: was passiert, wenn das Array mehr Elemente hat, als die korrespondierende Tabelle? (Oder die Tabelle weniger Felder als das Array Elemente)
$zugross = array ("sorte" => "birne",
"region" => "Südtirol",
"haendler" =>
"Obst&Gemüse", "preis" =>
"1.22",
"lieferung" => "Abholung");
pg_insert($conn,'obst',$zugross);
Nachdem die Funktion pg_insert() ausgeführt wurde, machen wir einen SELECT auf der Tabelle obst und finden sie unverändert vor. Die Arrayelemente wurden nicht eingefügt. Offenbar wird nur dann in die Tabelle eingefügt, wenn das Array in der Tabelle "Platz hat". Das Ergebnis von pg_insert ist FALSE, eine Meldung wird nicht zurückgegeben.
$falschertyp = array ("sorte" => "birne",
"region" => "Südtirol",
"haendler" => "Obst&Gemüse",
"preis" => "geschenkt");
pg_insert($conn,'obst',$falschertyp);
Auch wenn die Datentypen in den Arrayelementen und Tabellenspalten nicht kompatibel sind, wird nichts eingefügt. Das Ergebnis von pg_insert ist FALSE, eine Meldung wird nicht zurückgegeben
zweidimensionale Arrays
Bei einem zweidimensionalen Array muss die Funktion pg_insert() für jedes Element des übergoerdneten Arrays aufgerufen werden, damit sukzessive die assoziativen Arrays in die Tabelle geschrieben werden. Der Aufruf erfolgt in einer Schleife:
foreach ($obstarr as $k2 => $v2) {
$ins = pg_insert($conn, 'obst', $v2);
}
Schaut man sich nach diesem Aufruf die vormals leere Tabelle an, so sind alle Werte aus allen assoziativen Arrays in die Tabelle eingefügt.
phptest=# select * from obst;
sorte | region | haendler | preis
--------+----------+------------------+-------
apfel | bodensee | Kurt's Obstladen | 1.25
orange | spanien | Kurt's Obstladen | 1.40
kiwi | italien | Kurt's Obstladen | 1.60
(3 rows)
Wenn Sie nur die Werte eines ausgewählten assoziativen Arrays in die Tabelle übernehmen möchten, können Sie die Funktion auch mit diesen Array als Argument aufrufen. angenommen, Sie möchten nur die Werte des Arrays $obstarr[1] (orange) in die Tabelle schreiben, rufen Sie die Funktion so auf:
$ins = pg_insert($conn, 'obst', $obstarr[1]);
©cornelia boenigk 2003 |