WernerK: Ungültiger Objektname

Hallo,

in einem PHP Script habe ich eine simple SQL Select Abfrage auf eine Tabelle die ich vorhin angelegt habe. Ich bekomme immer eine Fehlermeldung

Array ( [0] => Array ( [0] => 42S02 [SQLSTATE] => 42S02 [1] => 208 [code] => 208 [2] => [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Ungültiger Objektname 'myDB.dbo.Testtable'

Die Tabelle gibt es definitiv. Ich kann mit SQL Server Management Studio ohne Probleme auf diese Tabelle zugreifen mit den gleichen Anmeldedaten.

Was kann das sein?

Hier noch der PHP Code:

 $sql="
        SELECT 
        [NO_NR]
        ,[COUNTRY]
                
    FROM [myDB].[dbo].[Testtable] 

    
    ";

    $rs = sqlsrv_query($con, $sql);
    if( $rs === false ) {
        die( print_r(sqlsrv_errors(), true));
    }

Gruss

Werner

  1. FROM [myDB].[dbo].[Testtable]
    
    1. Ich kenne den MSSQL-Server nicht. Der soll ja so seine Besonderheiten haben. Aber ob DAS stimmt? Dürfte da nicht nur Datenbank und Tabelle stehen?
    2. Bist Du Dir sicher, dass die Namen von Datenbank, Tabelle und die Spaltennamen in eckige Klammern gehören? Ich kenne da nur Backticks: →`←
    1. Hallo

      FROM [myDB].[dbo].[Testtable]
      

      Ich kenne den MSSQL-Server nicht. Der soll ja so seine Besonderheiten haben. Aber ob DAS stimmt? Dürfte da nicht nur Datenbank und Tabelle stehen?

      Ja, das passt. dbo (data base owner) ist ein Systemobjekt, ein Benutzer, der als Besitzer der konkreten Datenbank auf deren Ebene alles darf und alles vererbt.

      Bist Du Dir sicher, dass die Namen von Datenbank, Tabelle und die Spaltennamen in eckige Klammern gehören? Ich kenne da nur Backticks: →`←

      Auch das passt.

      Tschö, Auge

      --
      Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
      Toller Dampf voraus von Terry Pratchett
      1. Hallo,

        es lag "nur" an einem fehlenden Recht des Benutzers auf diese Tabelle. Vielen Dank

        Gruss

        Werner

        1. Ungültiger Objektname 'myDB.dbo.Testtable'

          es lag "nur" an einem fehlenden Recht des Benutzers auf diese Tabelle. Vielen Dank

          Ich kenne den MSSQL-Server nicht. Der soll ja so seine Besonderheiten haben.

          Nun ja. Meine Ansichten über "Besonderheiten" dieses MS-"SQL"-Servers sind bestätigt.

          Krude Syntax und Fehlermeldungen, die selbst "buggi" sind. Letzteres ist bezeichnend dafür, wie das Ding wohl programmiert sein muss.

          1. Hallo Regina,

            das Krude ist, dass die eckigen Klammern inflationär verwendet werden. Eigentlich braucht man sie nur, wenn ein Objektname den normalen Namensregeln nicht entspricht; also eine Table namens table oder eine Spalte namens tolle spalte + 4. Wenn das SQL Server Management Studio Statements generiert, verwendet es die Klammern großzügig, das ist einfacher, als ständig zu prüfen ob sie nötig sind. Und ob Backticks da weniger krude sind...

            Die Fehlermeldung an sich war komplett korrekt. Ein SQL Objekt, auf das ich keine Berechtigung habe, sehe ich nicht. Der Server muss so tun, als würde es das Objekt nicht geben. Die Information, dass eine bestimmte Table existiert, kann bereits die Sicherheit kompromittieren.

            Ansonsten gefällt mit SQL Server gar nicht schlecht. Aber das diskutieren wir besser nicht, sonst ufert es aus 😂

            Rolf

            --
            sumpsi - posui - clusi