Lennart: Tabellen existenz prüfen

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

  1. 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

    1. 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

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
  2. 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.

    • Du beziehst von deinem DBMS eine Liste mit Tabellen in einer Datenbank
    • Du prüfst, ob die gesuchte Tabelle bereits existiert

    Ansonsten wäre es hilfreich, wenn du schreibst, welches DBMS du verwendest und was du genau erreichen willst.

    Gruß
    Christoph Jeschke

    --
    Zend Certified Engineer
    1. 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

      --
      Zend Certified Engineer
  3. 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.

    1. 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

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. 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

        1. 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

          1. 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

        2. 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  
          ![](http://selfhtml.bitworks.de/Virencheck.gif)  
            
          
          -- 
          Nur selber lernen macht schlau  
          <http://bergpost.annerschbarrich.de>
          
          1. 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
            
        3. 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

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de