ich bin neu hier und wollte mal kräftig Hallo sagen.
Ich bin Anfänger in PHP, PostgresQL und Apache und diesen Dingen. Im Augenblick habe ich einen Apache zum Laufen gebracht und möchte nun auf meiner Maschine (hier auf der Arbeit) mittels PHP auf eine PostgresQL Datenbank zugreifen. Diese Datenbank besteht aus 10 Tabellen mit etwa je 10 Spalten und wurde in MySQL erstellt. Diese habe ich portiert und kann diese auch mittels phpPgAdmin aufrufen, verändern usw… d.h. es besteht einer Postgres Db Struktur, Version hier ist 8.3 - beim PHP über 5.0… und ein Apache 2.x… (leider muss ich hier Windows Vista benutzen (nutze zu Hause nur Mac) und ich habe auch noch Probleme mit einem Tool Excelfile in PostgresQL zu portieren, weil ich aufm Vista den SQlServer nicht zum Laufen bringe.)
Nun zu meiner ersten Frage: Ich würde mir gerne die Struktur ausgeben lassen. D.h. ich möchte ein PHp Script schreiben, mit dessen Hilfe man auf derm Server alle Tabllen und die angelegten Spalten einsehen kann. Ich muss dazusagen, dass noch keinerlei Datensätze in der Datenbank liegen…
[php]
$query = ‘SELECT * FROM “public”.“Stammdaten”;’;
$result = pg_query($query) or die('Abfrage fehlgeschlagen: ’ . pg_last_error());
// Ergebnisse in HTML ausgeben
echo “
\n”;
while ($line = pg_fetch_array($result, null, PGSQL_ASSOC)) {
echo “\t
\n”;
foreach ($line as $col_value) {
echo “\t\t
$col_value
\n”;
}
echo “\t
\n”;
}
echo “
\n”;
[/php]Wie man an dem Code sehen kann liegen die Tabellen alle wie die Tabelle Stamdaten unter “public”.“Tabellenname”. Ich habe mal einen Pseudodatensatz in Public.Stammdaten eingegeben und dieser wird auch ausgegeben. Ich möchte aber vielmehr eine Übersicht über alle Tabbeln und deren Spalten auslesen lassen.
Bin für direkte Tipps sehr dankbar, aber natürlich auch für gute Dokumentationen PHP<>PostgresQL oder andere WWW-Tipps.
Danke. Wie gesagt, ich benutze bzw. habe phpPgAdmin schon genutzt und kann mir dort auch die Übersicht aufrufen.
Ich will eben via PHp auch die Struktur der DB ausgeben, d.h. es sollen erst alle Tabellen auswählbar sein und dann zur ausgewählten Tabelle alle vorhandenen Spalten angezeigt werden, und ggf. später auch Type und ob es ein Pflichtfeld ist oder nicht usw…
–schema-only
[-s]
Sichert nur das Schema (Definitionen), nicht die
Daten.
Kann mir jemand kurz sagen, wie ich den Befehl im PHP einzubinden habe? Bzw. liefert dies die Tabellennamen in meinem public-Schama? Und nur diese als Liste?
Hab jetzt was gefunden, was bei mir im Terminal auch funktioniert, nur ich bekomme es im PHP Script mit pg_query nicht zum laufen:
SELECT relname FROM pg_class WHERE relname !~ '^(pg_|sql_)' AND relkind = 'r'; -- using INFORMATION_SCHEMA: SELECT table_name FROM information_schema.tables WHERE table_type = 'BASE TABLE' AND table_schema NOT IN ('pg_catalog', 'information_schema');
Wie muss ich den Code in PHp noch bearbeiten bzw. liegt es an den ‘…’-Formatierungen?
ich denk mal an dieser php-Zeile ist was nicht OK.
$query2 = ‘SELECT table_name FROM information_schema.tables WHERE table_type = ‘‘BASE TABLE’’ AND table_schema NOT IN (’‘pg_catalog’‘, ‘‘information_schema’’);’;
wobei ich für " zwei einzelne ’ ’ eingegeben habe.
Wenn ich den pefehl im psql direkt eingeben, bekomme ich eine richtige ausgabe.
Ich denke mir das so: Ich bräuchte eine Möglichkeit die Ausgabe der Tabellennamen ala Tabname[1], Tabname[2] gezielt zu ereichen, weil dann kann ich mit einer Schleife im PHP eine Liste anlegen lassen von 1 bis 10 laufen lassen und habe dann alle Tabellennamen in einer PHP-Auswahlliste, oder?
Weiss jemand, wie ich diese Funktionalität in PHP realisieren könnte?
[color=#000000][color=#0000bb]SELECT table_schema, table_name FROM information_schema[/color][color=#007700].[/color][color=#0000bb]tables WHERE table_schema [/color][color=#007700]= [/color][color=#dd0000]'public'[/color][/color]
Die Implementierung einer Schleife oder eines Loops in PHP sollte einfach sein - oder?
Ja, bzw. ich würds glaube ich hinbekommen, meine Frage ging ja auch dahin, dass ich nicht verstehe, wie ich aus
postgres=# SELECT table_schema, table_name FROM information_schema.tables WHERE table_schema = ‘public’ postgres-# ;
table_schema | table_name
--------------±------------------
public | kuchen
public | brote
public | schoko
public | obst
public | gemuese
(5 Zeilen)
nun eine PHP-Auswahlbox erstellen kann. Wie kann ich nun zB ‘schoko’ in einer Variable speichern, also sozusagen a-l-l-e Tabellennamen nacheinander in einen Array legen, den ich dann mit Laufe-von-0-bis-4-Schleifchen benutzen kann. Seen?
Danke ads, gute URLs und ich hab mich jetzt ehrlich ein paar Stunden mit dieser ganzen Sache beschäftigt.
Aber ich bekomme es nicht hin und ich denke mir doch wirklich, dass jemand hier im Forum das a) schon mal gemacht hat oder b) zumindest mal mit zwei oder drei Sätzchen sagen kann, wie es vom Prinzip her geht.
Also nochmal: Ich möchte ein PHP-Auswahlfeld (also so mit section option1 option2 /section) dynamisch generieren und zwar aus den Tabellennamen einer Postgres-DB. Ich benutze PHP > 5 und Postgres >8.2 auf einem Windows Vista, Apache und Postgres laufen und im psql funktioniert die Aussgabe der Tabellen auch, aber ich kann die Tabellennamen im PHP nicht einlesen bzw. ich finde den richtigen Befehl dafür nicht, weil alle pg_fetch_(XYZ)… usw… ja für Datensätze sind, ich aber die Tabellennamen haben will.
Dann habe ich mir die FAQ zum information_schema angesehen, daraus werde ich aber nicht schlau, ich weiss nicht, wie ich das benutzen kann. Für die Spaltennamen habe ich die Abfrage schon dynamisch hinbekommen, die läuft auch super, wenn man die Tabelle auswählt:
<?php
for ($i = 0; $i < $nf; $i++)
{
echo ''.$i.' '.pg_field_name ($res, $i).''; // Namen der Spalten in Tabelle
}
echo '';
echo '
Anzahl der Felder: '.$nf.'
'; // Anzahl der Spalten in Tabelle
?>
Deswegen nochmal ganz freundlich an alle die Bitte, mir zu helfen. Bitte! Und Danke für die Antworten und Linktipps usw., das hat mir schon sehr geholfen und ich weiss, ich sollte nochmal einige Grundlagen lesen…
Schönen Abend
mod_che
OK; logisch die Info kommt per Post wieso dann Request nehmen, ist sicherlich etwas altmodisch bzw. unsicher, da hast Du sehr recht.
Weisst Du, ich will gar kein fertiges Beispiel, ich würde gerne nur wissen mit welchen 1,2, 3 Befeheln das möglich ist oder was ich mir genauer ansehen müsste.
Ach so, Du suchst das immer noch. Ich hab Dir vor eineinhalb Wochen schon gesagt, wie das geht.
Dann habe ich mir die FAQ zum information_schema angesehen, daraus werde ich aber nicht schlau, ich weiss nicht, wie ich das benutzen kann. Für die Spaltennamen habe ich die Abfrage schon dynamisch hinbekommen, die läuft auch super, wenn man die Tabelle auswählt:
Eine FAQ zum information_schema kenne ich nicht, wohl aber die offizielle Doku. Und wenn Du da mal reinschauen würdest, könntest Du erkennen, daß diese Tabellen dort exakt das enthalten, was Du brauchst,
um via schemata → tables → columns alle Infos Über Schemas, Tabellen und Spalten zu erfahren.