Tabellen existenz prüfen
Lennart
- php
Nabend,
ich hänge jetzt schon ziemlich lange an einem Problem fest.
Es geht darum das ich gerne überprüfen würde ob eine <b>bestimmte</b>
Tabelle vorhanden ist.
Das ganze würde ich gerne in einer if Anweisung packen.
Ich habe mich schon dumm und dämlich gegoogelt und nichts gefunden was mir weiterhilft. Hoffe ihr könnts!
Grüße Lennart
Hallo,
ich hänge jetzt schon ziemlich lange an einem Problem fest.
Es geht darum das ich gerne überprüfen würde ob eine<b>bestimmte</b>
Tabelle vorhanden ist.
und wie identifizierst Du diese *bestimmte* Tabelle?
Welcher Art ist sie denn? Ist es ein table-Element im resultierenden HTML-Code, ist es ine Tabelle in einer bestimmten Datenbank, die von einem bestimmten Datenbankmanagementsystem (DBMS) verwaltet wird, ist ein Tabellenblatt einer Tabellenkalkulation, ...
Für das meiste wird sich eine Lösung finden. Spezifiziere also, was Du suchst.
Freundliche Grüße
Vinzenz
Hello,
Welcher Art ist sie denn? Ist es ein table-Element im resultierenden HTML-Code, ist es ine Tabelle in einer bestimmten Datenbank, die von einem bestimmten Datenbankmanagementsystem (DBMS) verwaltet wird, ist ein Tabellenblatt einer Tabellenkalkulation, ...
Es muss sich wohl um eine PHP-Tabelle handeln. Siehe Betreff des Postings.
*scnr*
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
Guten Tag,
ich hänge jetzt schon ziemlich lange an einem Problem fest.
Es geht darum das ich gerne überprüfen würde ob eine<b>bestimmte</b>
Tabelle vorhanden ist.
Ansonsten wäre es hilfreich, wenn du schreibst, welches DBMS du verwendest und was du genau erreichen willst.
Gruß
Christoph Jeschke
Guten Tag,
ich gehe davon aus, dass du eine Tabelle in einer Datenbank suchst. Du sollst genauer beschreiben, was du eigentlich wissen willst.
Gruß
Christoph Jeschke
Hallo,
also es handelt sich dabei um eine ganz normale mysql Tabelle.
Das was Christoph gesagt hat trifft es eigentlich schon.
Also suchen tue ich die Tabelle nicht direkt. Also wie schon gesagt ich möchte einfach nur prüfen ob eine bestimmte Tabelle vorhanden ist oder nicht.
Hello,
Also suchen tue ich die Tabelle nicht direkt. Also wie schon gesagt ich möchte einfach nur prüfen ob eine bestimmte Tabelle vorhanden ist oder nicht.
Mit einem "show tables from datenbank where tablename = '$tablename'"
solltest Du zum Erfolg kommen. Man kann ab MySQL 5.x auch ein Select auf das Information_schema absetzen. Das setzt aber entsprechende Rechte voraus und ist etwas komplizierter ;-)
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
Hallo Tom,
Also suchen tue ich die Tabelle nicht direkt. Also wie schon gesagt ich möchte einfach nur prüfen ob eine bestimmte Tabelle vorhanden ist oder nicht.
Mit einem "show tables from datenbank where tablename = '$tablename'"
solltest Du zum Erfolg kommen. Man kann ab MySQL 5.x auch ein Select auf das Information_schema absetzen. Das setzt aber entsprechende Rechte voraus und ist etwas komplizierter ;-)
ich muss Dir widersprechen.
Weder setzt es mehr Rechte voraus als "SHOW TABLES", noch ist es komplizierter. Es ist einfacher, weil es ein ganz normales SELECT-Statement ist.
SELECT
TABLE_NAME
FROM
INFORMATION_SCHEMA.TABLES
WHERE
TABLE_NAME = '<gewünschter Tabellenname>'
Dazu ist es noch deutlich portabler. Es spricht meiner Meinung nach wenig dafür, sich die proprietäre SHOW-Syntax anzutun. Für diesen Zweck definitiv *nichts*.
Ich zitiere aus dem entsprechenden Handbuchabschnitt:
<zitat>
There is no difference between the privileges required for SHOW
statements and those required to select information from
INFORMATION_SCHEMA. In either case, you have to have some privilege
on an object in order to see information about it.
</zitat>
Soviel zu "mehr Rechte".
<zitat>
Using SELECT has these advantages, compared to SHOW:
- It conforms to Codd's rules. That is, all access is done on tables.
- Nobody needs to learn a new statement syntax. Because they already
know how SELECT works, they only need to learn the object names.
- The implementor need not worry about adding keywords.
- There are millions of possible output variations, instead of just
one. This provides more flexibility for applications that have
varying requirements about what metadata they need.
- Migration is easier because every other DBMS does it this way.
</zitat>
Soviel zu den Vorteilen, die der Hersteller selbst sieht. Für mich sind diese Vorteile sehr überzeugend.
Energische Grüße
Vinzenz
Nabend,
danke erstmal für die vielen Antworten. Vinzenz, dein Code ist (denke ich) genau das was ich suche, nur wie packe sowas in eine if abfrage?
Viele Grüße Lennart
Hallo Lennart, hi Tom,
danke erstmal für die vielen Antworten. Vinzenz, dein Code ist (denke ich) genau das was ich suche, nur wie packe sowas in eine if abfrage?
wenn Du die Tabelle in einer bestimmten Datenbank suchst, dann ergänzt Du die WHERE-Klausel noch ein wenig
SELECT -- Gib mir
TABLE_NAME -- die Tabellennamen,
FROM -- aus
INFORMATION_SCHEMA.TABLES -- der Liste der Tabellen in der DB-Übersicht
WHERE -- wobei mich nur Tabellen interessieren
TABLE_NAME = '<gewünschter Tabellenname>'
-- die einen bestimmten Namen tragen
AND -- und sich
TABLE_SCHEMA = '<DB-Name>' -- in einer bestimmten Datenbank befinden.
Diese Abfrage setzt Du per PHP an MySQL ab. Wird sie erfolgreich ausgeführt und ist die Anzahl der Datensätze im Abfrageresultat größer als 0, dann gibt es die Tabelle. Ist die Anzahl 0, dann gibt es die Tabelle nicht in der bestimmten Datenbank.
Je nachdem, ob Du mit mysli, PDO oder den veralteten mysql_*-Funktionen arbeitest, kannst Du die entsprechende Funktion nutzen.
Freundliche Grüße
Vinzenz
Hello,
ich muss Dir widersprechen.
Habe ich erwartet.
Weder setzt es mehr Rechte voraus als "SHOW TABLES", noch ist es komplizierter. Es ist einfacher, weil es ein ganz normales SELECT-Statement ist.
SELECT
TABLE_NAME
FROM
INFORMATION_SCHEMA.TABLES
WHERE
TABLE_NAME = '<gewünschter Tabellenname>'
Das ist inzwiwschen ein Standardposting von Dir, das sogar gerade vor mir auf dem Tisch liegt.
Ich bin mir nur vollkommen unsicher, wie ich die Tabelle einer DB zuordnen kann. Es nützt mir ja nichts, die Existenz einer Tabelle `test` abzufragen, wenn ich gar nicht weiß, ob sie zu meiner Datenbank gehört.
Wie wird das geregelt und wie kann ich verhindern, dass bei gemeinsam genutzen Datenbankservern jeder Nutzer die Tabellen der anderen Nutzer sehen kann?
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg

--
Nur selber lernen macht schlau
<http://bergpost.annerschbarrich.de>
Hallo Tom,
ich muss Dir widersprechen.
Habe ich erwartet.
hehe :-)
Weder setzt es mehr Rechte voraus als "SHOW TABLES", noch ist es komplizierter. Es ist einfacher, weil es ein ganz normales SELECT-Statement ist.
SELECT
TABLE_NAME
FROM
INFORMATION_SCHEMA.TABLES
WHERE
TABLE_NAME = '<gewünschter Tabellenname>'
>
> Das ist inzwiwschen ein Standardposting von Dir, das sogar gerade vor mir auf dem Tisch liegt.
>
> Ich bin mir nur vollkommen unsicher, wie ich die Tabelle einer DB zuordnen kann. Es nützt mir ja nichts, die Existenz einer Tabelle `test` abzufragen, wenn ich gar nicht weiß, ob sie zu meiner Datenbank gehört.
nutze die Spalte TABLE\_SCHEMA.
> Wie wird das geregelt und wie kann ich verhindern, dass bei gemeinsam genutzen Datenbankservern jeder Nutzer die Tabellen der anderen Nutzer sehen kann?
jeder Nutzer kann die Tabellen sehen, die er sehen kann. Hört sich doch trivial an. Hast Du keine Berechtigungen für die Datenbank db\_x, dann siehst Du auch deren Tabellen nicht. Im Shared-Hosting-Bereich gibt es zumeist (außer dem Superuser) genau einen Datenbanknutzer, der mit einer bestimmten DB arbeiten darf.
Freundliche Grüße
Vinzenz
Hello Vinzenz,
ich habe da noch eine andere MySL-Frage (Version > 5.0), die mich die ganze Woche beschäftigt hat udn bei der ich leider nicht zum Erfolg gekommen bin.
Kannst Du mir da weiterhelfen?
Ich versucht, die Library MySQL++ für Eclipse CDT (auf Windows) zu erstellen und und einzubinden, damit ich über C++ zugreifen kann auf MySQL.
Die Import-Lib aus der C-Api wurde gebaut, die mysql++ - Files (inclusive der Test-Exes zum Üben) wurden ordnungsgemäß erstell und sie laufen. Aber eine Library, die ich nun einbinden könnte in Wascana, habe ich nicht entdecken können. Außerdem kriege ich einfach nicht raus, wie man die Libs dann in Wascana einbinden muss.
Pfade kann man einstellen unter
Projekt - Properties - C/C++-Genaral - Paths & symbols
das ist ja auch beschrieben in der Hilfe.
Leider hat das keinen Effekt.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg