Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] PDO: Unterschied mySQL und MS SQL-Server

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] PDO: Unterschied mySQL und MS SQL-Server

    Tag zusammen,

    ich wollte gerade eine Abfrage schreiben, die alle Tabellen einer Datenbank abfragt.

    Unter mySQL würde das so aussehen:
    Code:
    SELECT 
      TABLE_NAME
    FROM information_schema.TABLES 
    WHERE
      TABLE_TYPE='BASE TABLE'
      AND TABLE_SCHEMA='yourdatabasename';
    Diese Abfrage liefert für MS SQL-Server aber ein leeres Ergebnis. Der Grund offenbart sich beim Blick in die Tabelle information_schema.TABLES:

    MS SQL-Server speichert den Datenbanknamen in der Spalte TABLE_CATALOG und nicht in TABLE_SCHEMA.

    Wenn ich nun wieder separate Abfragen je Datenbank-Engine brauche, dann ist ein großer Vorteil von PDO dahin.

    Wie löst Ihr das? oder Gibt es eine Alternative zur obigen Abfrage, die immer funzt?


  • #2
    Zitat von webald Beitrag anzeigen
    T
    MS SQL-Server speichert den Datenbanknamen in der Spalte TABLE_CATALOG und nicht in TABLE_SCHEMA.
    Das Schöne an Standards ist, daß es so viele davon gibt. Und M$ ist ein eigener, und MySQL ignoriert auch recht viele. So what?
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Ich kann nur raten ob das unter M$ funktioniert, aber probieren geht über studieren:

      Code:
      SHOW TABLES FROM yourdatabasename;

      Kommentar


      • #4
        Zitat von cycap Beitrag anzeigen
        Ich kann nur raten ob das unter M$ funktioniert, aber probieren geht über studieren:

        Code:
        SHOW TABLES FROM yourdatabasename;
        Dieser Standard wird nur von MySQL eingehalten
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #5
          Zitat von akretschmer Beitrag anzeigen
          Dieser Standard wird nur von MySQL eingehalten
          grr, das war ja klar

          Kommentar


          • #6
            Zitat von cycap Beitrag anzeigen
            Ich kann nur raten ob das unter M$ funktioniert, aber probieren geht über studieren:

            Code:
            SHOW TABLES FROM yourdatabasename;
            ... und lifert meines Wissens nach nicht nur Tabellen, sondern auch Views.

            Was funktioniert ist mal wieder ein Würgaround:
            Code:
            SELECT 
              TABLE_NAME
            FROM information_schema.TABLES 
            WHERE
              TABLE_TYPE='BASE TABLE'
              AND (TABLE_SCHEMA='mydatabasename'
              OR TABLE_CATALOG='mydatabasename');

            Kommentar


            • #7
              Zitat von webald Beitrag anzeigen

              MS SQL-Server speichert den Datenbanknamen in der Spalte TABLE_CATALOG und nicht in TABLE_SCHEMA.

              Grad mal in PG geschaut, da ist es wie in M$SQL. Da PG hier sich IMHO an den Standard hält ist es wohl MySQL, was es nicht macht.
              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar


              • #8
                Zitat von webald Beitrag anzeigen
                Wenn ich nun wieder separate Abfragen je Datenbank-Engine brauche, dann ist ein großer Vorteil von PDO dahin.

                Wie löst Ihr das? oder Gibt es eine Alternative zur obigen Abfrage, die immer funzt?
                PDO abstrahiert die Schnittstelle zur Datenbank, aber nicht was über diese Schnittstelle ausgetauscht wird.

                Zitat von akretschmer Beitrag anzeigen
                Grad mal in PG geschaut, da ist es wie in M$SQL. Da PG hier sich IMHO an den Standard hält ist es wohl MySQL, was es nicht macht.
                Ich weiß nicht warum das damals so implementiert wurde, aber der Katalog ist Systemweit und nicht Datenbankweit. Das hat dann auch den Effekt das ein User immer alles sieht worauf er Zugriff hat, egal welche Datenbank gewählt ist. Wenn man eine Datenbank als Schema sieht passt das Verhalten wieder.

                Mysql Server = Datenbank (der ebend nur eine Datenbank untersützt)
                Datenbank = Schema

                Passt...

                Kommentar


                • #9
                  Zitat von webald Beitrag anzeigen
                  Wie löst Ihr das?
                  Ich habe vorrangig mit MySQL und SQLite zu tun. Hab es aufgegeben, nach universellen SQL-Abfragen zu suchen und mir für meine Zwecke eine Erweiterungsklasse für PDO geschrieben. Die Methode getTableNames() geht dann so los:
                  PHP-Code:
                    public function getTableNames() {
                      
                  $driver strtolower($this->getAttr('DRIVER_NAME'));
                      if(
                  $driver == 'mysql') {
                        
                  $query "SHOW TABLES";
                      } 
                      elseif(
                  $driver == 'sqlite') {
                        
                  $query "SELECT name FROM sqlite_master WHERE type='table';";
                      }
                      : 
                  LG jspit
                  PHP-Klassen auf github

                  Kommentar


                  • #10
                    Man könnte auch DQL verwenden, das ist genau für solche Zwecke gedacht. So würde ich das machen. Ob das allerdings auch genau diesen Fall abfängt weiss ich nicht.

                    Kommentar

                    Lädt...
                    X