In den letzten Kapiteln haben wir bereits gesehen, wie Metadaten in anderen Programmiersprachen abgefragt werden können. Im Prinzip bietet PHP alle Möglichkeiten, die andere Programmiersprachen auch bieten - es gibt jedoch ein kleines Feature, das wir sonst noch nirgends entdeckt haben:
<?php
$cstr="host=localhost dbname=test user=hs";
$conn = @pg_connect ($cstr);
if ($conn)
{
echo ("Datenbankverbindung ok!");
$result = @pg_meta_data($conn, "t_user");
echo ("<br>");
echo var_dump($result);
@pg_close( $conn );
}
else
{
echo ("Datenbankhandle nicht ok!");
}
?>
pg_meta_data liest Metadaten zu einer bestimmten Tabelle aus. Diese Metadaten werden dann in einem Array gespeichert und können nach Bedarf direkt ausgegeben werden. Wir verwenden zu diesem Zwecke einfach die Funktion var_dump, die wir bereits aus den vorangegangenen Beispielen kennen:
Datenbankverbindung ok!
array(2) { ["id"]=> array(5) { ["num"]=> int(1) ["type"]=> string(4) "int4"
["len"]=> int(4) ["not null"]=> bool(false) ["has default"]=> bool(false) }
["name"]=> array(5) { ["num"]=> int(2) ["type"]=> string(4) "text" ["len"]=>
int(-1) ["not null"]=> bool(false) ["has default"]=> bool(false) } }
Wie Sie sehen, enthält die Ausgabe eine Reihe von sinnvollen Informationen, die man in vielen Applikationen direkt verwenden kann.
Oft benötigen Sie Informationen nicht auf Tabellen sondern auf Datensatzebene. PHP stellt auch für diese Zwecke die nötigen Funktionen zur Verfügung:
<?php
$cstr="host=localhost port=5432 dbname=test user=hs";
$conn = @pg_connect ($cstr);
if ($conn)
{
$result = @pg_query($conn, "SELECT COUNT(*) FROM pg_class");
@pg_close( $conn );
echo "spalten: ".pg_num_fields($result)."<br>\n";
echo "zeilen: ".pg_num_rows($result)."<br>\n";
echo "geschrieben länge: "
.pg_field_prtlen($result, 0, 0)."<br>\n";
echo "null wert: "
.pg_field_is_null($result, 0, 0)."<br>\n";
echo "storage verbrauch: "
.pg_field_size($result, 0)."<br>\n";
echo "name des ersten feldes: "
.pg_field_name($result, 0)."<br>\n";
}
else
{
echo ("Datenbankhandle nicht ok!");
}
?>
pg_num_fields und pg_num_rows ermitteln die Anzahl der Spalten respektive die Anzahl der Datensätze. In weiterer Folge sehen wir uns an, wir lange das auszugebende Feld ist - dazu verwenden wir die Funktion pg_field_prtlen.
Manchmal will man wissen, ob ein Feld einen NULL-Wert enthält oder nicht. In PHP kann man diesen Check durch den Aufruf von pg_field_is_null durchführen - in unserem Fall wird '0' zurückgegeben, da das Feld keinen NULL-Wert enthält.
Auch die interne Größe und der Name eines Felder sind gelegentlich von Interesse. In unserem Beispiel werden diese beiden Werte durch die letzten beiden Funktionsaufrufe im if-Block ermittelt. Der Output des Programmes sieht dann so aus:
spalten: 1 zeilen: 1 geschrieben länge: 3 null wert: 0 storage verbrauch: 8 name des ersten feldes: count
Wichtig zu wissen ist, dass die Funktion COUNT einen 8-byte Wert zurückgibt.
http://www.postgresql.at