Ina: ob table MYSQL Beispiel existiert

Hallo

Such vergebens nach dem Code.

if(-e Table_Beispiel){

print "Table Beispiel ist in MYSQL vorhanden";
}

Vielen Dank im Voraus

Ina

  1. Such vergebens nach dem Code.

    if(-e Table_Beispiel){

    print "Table Beispiel ist in MYSQL vorhanden";
    }

    uh, so einfach ist das nicht. Du benötigst dazu das Modul DBI

    Struppi.

    1. Hallo Struppi,

      In die Datenbank Tabellen anlegen und löschen mit CGI funktioniert ja schon.

      MFG

      Ina

      1. In die Datenbank Tabellen anlegen und löschen mit CGI funktioniert ja schon.

        Das ist schön. du suchst nach einem mySQL Befehl um abzufragen ob eine Tabelle existiert. Den gibt es nicht. Du kannst aber   SHOW TABLES dazu verwenden.

        Struppi.

        1. Hi Struppi,

          Hab's geschafft !

          $tabsth2 = $dbh->table_info();
              while ($table = $tabsth2->fetchrow_arrayref) {
           $sth2 = $dbh->prepare("SELECT * FROM @$table[2]");
           $sth2->execute();
          $tisch =@$table[2];

          if($tisch eq 'Bespiel_Tabelle'){
          push(@istda, "$tisch")
          }else{push(@istda, "")}

          }

          print "<H3>@istda</H3>";

          Vielen dank für Deine Hlfe

          Ina

          1. Hab's geschafft !

            Ob das die beste Lösung ist, ist die Frage.

            $tabsth2 = $dbh->table_info();

            zitat:

            This method can be expensive, and can return a large amount of data. (For example, small Oracle installation returns over 2000 rows.) So it's a good idea to use the filters to limit the data as much as possible.

            while ($table = $tabsth2->fetchrow_arrayref) {
            $sth2 = $dbh->prepare("SELECT * FROM @$table[2]");
            $sth2->execute();
            $tisch =@$table[2];

            if($tisch eq 'Bespiel_Tabelle'){

            Das verstehe ich nicht ganz. Sieht zumindest nicht logisch aus. Was soll das prepare und execute bewirken?

            Struppi.

            1. Hi Struppi,

              Hab's geschafft !

              $sth2 = $dbh->prepare("SELECT * FROM @$table[2]"); #Zeigt alle Tables an
              $sth2->execute(); #glaube ich soetwas wie exit;

              MFG

              Ina

              1. $sth2 = $dbh->prepare("SELECT * FROM @$table[2]"); #Zeigt alle Tables an

                Keine Ahnung was in $tables[2] steht (das @ ist überflüssig), aber das bereitet die Abfrage für alle Datenzeilen der Tabelle vor.

                $sth2->execute(); #glaube ich soetwas wie exit;

                und das führt diese Abfrage aus. Nur verwirft dein Beispiel diese Abfrage. Insofern ist mir nicht klar was du damit anfängt. Mach eine Abfrage mit show tables, das dürfte das einfachste sein.

                Struppi.

                1. Hallo Struppi,

                  und das führt diese Abfrage aus. Nur verwirft dein Beispiel diese Abfrage. Insofern ist mir nicht klar was du damit anfängt. Mach eine Abfrage mit show tables, das dürfte das einfachste sein.

                  Nö. Viel einfacher ist - wie ich bereits vor zwei Tagen schrieb - eine Abfrage des INFORMATION_SCHEMA. Kein Grund, irgendeine herstellerspezifische Syntax zu lernen oder nachzuschlagen, statt dessen wohlbekannte SELECT-Syntax.

                  Freundliche Grüße

                  Vinzenz

                  1. und das führt diese Abfrage aus. Nur verwirft dein Beispiel diese Abfrage. Insofern ist mir nicht klar was du damit anfängt. Mach eine Abfrage mit show tables, das dürfte das einfachste sein.

                    Nö. Viel einfacher ist - wie ich bereits vor zwei Tagen schrieb - eine Abfrage des INFORMATION_SCHEMA. Kein Grund, irgendeine herstellerspezifische Syntax zu lernen oder nachzuschlagen, statt dessen wohlbekannte SELECT-Syntax.

                    (Vor zwei Tagen war ich nicht da)
                    Aber ehrlich gesagt verstehe ich das nicht. Was ist SCHEMA_NAME was ist INFORMATION_SCHEMA? Wie kann ich daraus eine Abfrage machen? Was gibt sie sie zurück?

                    Übrigens auch DBI->table_info baut wohl darauf auf, aber auch das verstehe ich nicht. Ich bekomme zwar Rückgabewerte, aber ich werd aus der Erläuterung nicht schlau, wie ich daraus die info für eine spezifische Tabelle ziehen kann.

                    my $sth = $DBH->table_info();  
                    my $d = $sth->fetchall_arrayref();  
                    
                    

                    Gibt mir eine lange Liste mit allen Tabellen und 5 Eigenschaften zurück. Dann ist es auf jeden Fall einfacher mit show tables, da kann ich auch noch mit LIKE filtern.

                    Die Frage war ja, wie kann man feststellen ob eine Tabelle existiert?

                    Struppi.

                    1. Hallo

                      Nö. Viel einfacher ist - wie ich bereits vor zwei Tagen schrieb - eine Abfrage des INFORMATION_SCHEMA. Kein Grund, irgendeine herstellerspezifische Syntax zu lernen oder nachzuschlagen, statt dessen wohlbekannte SELECT-Syntax.

                      Die Frage war ja, wie kann man feststellen ob eine Tabelle existiert?

                      mit folgendem fast intuitiven SQL-Statement,

                        
                      USE INFORMATION_SCHEMA;   -- Verwende die Datenbank INFORMATION_SCHEMA  
                                                -- nutze ggf. entsprechende API-Funktionen  
                        
                      SELECT                    -- Gib mir  
                          TABLE_NAME            -- den Tabellennamen  
                      FROM                      -- aus der Tabelle  
                          TABLES                -- TABLES  
                      WHERE                     -- die sich in der  
                          TABLE_SCHEMA = '<datenbankname>'    -- bestimmten Datenbank befindet und  
                          TABLE_NAME = '<tabellenname>'       -- einen bestimmten Tabellennamen trägt.  
                      
                      

                      Wenn das Ergebnis nicht leer ist, dann existiert die Tabelle in der angegebenen Datenbank.

                      Freundliche Grüße

                      Vinzenz

                      1. Die Frage war ja, wie kann man feststellen ob eine Tabelle existiert?

                        mit folgendem fast intuitiven SQL-Statement,

                        Ja schön und gut in der Konsole, aber wie ist dies in der Perl API integriert?
                        Wie kann ich da USE INFORMATION_SCHEMA einbauen?

                        SELECT                    -- Gib mir
                            TABLE_NAME            -- den Tabellennamen
                        FROM                      -- aus der Tabelle
                            TABLES                -- TABLES
                        WHERE                     -- die sich in der
                            TABLE_SCHEMA = '<datenbankname>'    -- bestimmten Datenbank befindet und
                            TABLE_NAME = '<tabellenname>'       -- einen bestimmten Tabellennamen trägt.

                        Dieses SQL statement ruft einen Syntaxfehler hervor. Wenn ich hier INFORMATION_SCHEMA qualifiziert angebe, kommt:
                        DBD::mysql::st execute failed: Table 'information_schema.tables' doesn't exist at ...\test_db.pl line 33.

                        Also für mich ist das leider alles andere als intuitiv.

                        Struppi.

                      2. mit folgendem fast intuitiven SQL-Statement,

                        das ich jetzt mal in der mysql Konsole probiert habe, auch dort funktioniert es nicht.

                        USE INFORMATION_SCHEMA;   -- Verwende die Datenbank INFORMATION_SCHEMA
                                                  -- nutze ggf. entsprechende API-Funktionen

                        ERROR 1049 (42000): Unknown database 'information_schema'

                        Struppi.

                        1. Hallo Struppi,

                          USE INFORMATION_SCHEMA;   -- Verwende die Datenbank INFORMATION_SCHEMA
                                                    -- nutze ggf. entsprechende API-Funktionen

                          ERROR 1049 (42000): Unknown database 'information_schema'

                          welche MySQL-Version? MySQL 5.0.x, d.h. eine Standard-Produktionsversion ist vorausgesetzt :-)

                          Freundliche Grüße

                          Vinzenz

                          1. USE INFORMATION_SCHEMA;   -- Verwende die Datenbank INFORMATION_SCHEMA
                                                      -- nutze ggf. entsprechende API-Funktionen

                            ERROR 1049 (42000): Unknown database 'information_schema'

                            welche MySQL-Version? MySQL 5.0.x, d.h. eine Standard-Produktionsversion ist vorausgesetzt :-)

                            5.0.22

                            Struppi.

                            1. Hallo

                              USE INFORMATION_SCHEMA;   -- Verwende die Datenbank INFORMATION_SCHEMA
                                                        -- nutze ggf. entsprechende API-Funktionen

                              ERROR 1049 (42000): Unknown database 'information_schema'

                              welche MySQL-Version? MySQL 5.0.x, d.h. eine Standard-Produktionsversion ist vorausgesetzt :-)

                              5.0.22

                              dann machst Du definitiv etwas falsch. Auch in Version 5.0.22 ist das INFORMATION_SCHEMA vorhanden, der Zugriff ist - wie in der von mir verlinkten Doku - auf allen mir zugänglichen MySQL-Servern, auch meiner Testinstallation von 5.0.22 möglich.

                              Was sagt SELECT VERSION();

                              Freundliche Grüße

                              Vinzenz

                              1. Was sagt SELECT VERSION();

                                alles klar, ich hab mich auf phpMyAdmin verlassen, das ist wohl ein Fehler.

                                +---------------+
                                | VERSION()     |
                                +---------------+
                                | 4.1.10-nt-log |
                                +---------------+

                                Struppi.

                                1. Hallo Struppi,

                                  Was sagt SELECT VERSION();
                                  alles klar, ich hab mich auf phpMyAdmin verlassen, das ist wohl ein Fehler.

                                  die Ausgabe, die Du hier wiedergegeben hast, war in diesem Fall die Version der Client-Bibliotheken, die sind recht neu.

                                  +---------------+
                                  | VERSION()     |
                                  +---------------+
                                  | 4.1.10-nt-log |
                                  +---------------+

                                  Die Serverversion dagegen ist seeehr alt :-(

                                  Freundliche Grüße

                                  Vinzenz

          2. Hi Struppi,

            Hab's geschafft !

            $sth2 = $dbh->prepare("SELECT * FROM @$table[2]"); #Zeigt alle Tables an
            $sth2->execute(); #glaube ich soetwas wie exit;

            MFG

            Ina