Klaus: MSSQL-Fehler bei Stored Procedure in PHP anzeigen lassen?

Hallo,

ich habe eine in einer MSSQL-DB abgelegte Stored Procedure.
Diese rufe ich über PHP auf, aber sie läuft nach einiger Zeit auf einen Fehler.
Ich habe nur keine Idee, wie ich herausfinden kann, was für ein Fehler aufgetreten sein könnte.
Ich bin jetzt leider nicht der Profi für MSSQL-DBs, weiß also nicht, wo ich da nach Logs ausschau halten könnte, aber in der error.log des Apache steht nur der Fehler, der mir auch am Screen angezeigt wird:

Warning: mssql_execute() [function.mssql-execute]: stored procedure execution failed in ...

Hier der Aufruf im PHP:

  
	$conn = mssql_connect($mssqlserver, $mssqluser, $mssqlpass) or die ("Kann keine Verbindung zum MS SQL Server aufbauen");  
	mssql_select_db("DB", $conn) or die ("Kann keine Verbindung zur Datenbank herstellen");  
  
	$abfrage = "select top 5 * from myweb.T_Texte";  
	$erg = mssql_query($abfrage);  
  
	mssql_free_result($erg);  
  
	mssql_query("SET ANSI_NULLS ON; SET ANSI_WARNINGS ON;");  
	$proc = mssql_init('myweb.sp_syncdata', $conn);  
	$proc_result = mssql_execute($proc);  
  
	print_r($proc_result);  
  
	mssql_free_result($proc);  

  1. Mahlzeit,

    Ich bin jetzt leider nicht der Profi für MSSQL-DBs, weiß also nicht, wo ich da nach Logs ausschau halten könnte

    Das steht in der Konfiguration von MSSQL. Da wird auch festgelegt, was genau geloggt wird.

    --
    42
    1. Hi,

      Das steht in der Konfiguration von MSSQL. Da wird auch festgelegt, was genau geloggt wird.

      Wie gesagt, bin da nicht der Profi... Bisher habe ich nicht gefunden, wo das eingestellt wird.

      Ich habe in meinem Script noch die Zeile
      echo "<br/>Fehler: ".mssql_get_last_message();
      eingebaut.

      Ich erhalte dadurch die für mich ziemlich irritierende Meldung:

      Fehler: Der Datenbankkontext wurde auf 'DB' geändert.

      mssql_select_db("DB", $conn)

      Warum? Ich bin doch bereits auf 'DB'. Oder ist das einfach die letzte Meldung von MSSQL und damit kein Fehler?

      1. Hi,

        Ich erhalte dadurch die für mich ziemlich irritierende Meldung:

        Fehler: Der Datenbankkontext wurde auf 'DB' geändert.

        mssql_select_db("DB", $conn)

        Warum? Ich bin doch bereits auf 'DB'. Oder ist das einfach die letzte Meldung von MSSQL und damit kein Fehler?

        Laut Kommentaren im Handbuch liefert mssql_get_last_message von mehrzeiligen Meldungen nur die letzte Zeile.

        Dort wird auch vorgeschlagen, mittels select @@ERROR as ErrorCode den nummerischen Fehlercode abzufragen – vielleicht probierst du mal, ob das bei der Fehlersuche hilft.

        MfG ChrisB

        --
        Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
      2. Hallo

        Ich erhalte dadurch die für mich ziemlich irritierende Meldung:

        Fehler: Der Datenbankkontext wurde auf 'DB' geändert.

        mssql_select_db("DB", $conn)

        Warum? Ich bin doch bereits auf 'DB'.

        Wieso bist du vor mssql_select_db bereits auf „DB“?

        In deinem ersten Posting schreibst du folgenden Code:

        $conn = mssql_connect($mssqlserver, $mssqluser, $mssqlpass) or die ("Kann keine Verbindung zum MS SQL Server aufbauen");  
        mssql_select_db("DB", $conn) or die ("Kann keine Verbindung zur Datenbank herstellen");
        

        Was steht in der Variable $mssqlserver?

        Oder ist das einfach die letzte Meldung von MSSQL und damit kein Fehler?

        Laut deinem ersten Posting ist da ein Fehler.

        Warning: mssql_execute() [function.mssql-execute]: stored procedure execution failed in ...

        Welche zeile ist das? Was steht da drin?

        Tschö, Auge

        --
        Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
        Terry Pratchett, "Wachen! Wachen!"
        ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
        Veranstaltungsdatenbank Vdb 0.3
        1. Hallo

          Noch eine Frage.

          mssql_select_db("DB", $conn)

          Laut dem PHP-Handbuch ist die MSSQL-Extension seit PHP5.3 nicht mehr verfügbar. Es gibt nur eine PHP-Extension von MS, die leider nur unter Windows läuft. Ist deine PHP-Version derart alt, dass da noch diese Erweiterung läuft?

          Tschö, Auge

          --
          Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
          Terry Pratchett, "Wachen! Wachen!"
          ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
          Veranstaltungsdatenbank Vdb 0.3
        2. Hallo

          Ich erhalte dadurch die für mich ziemlich irritierende Meldung:

          Fehler: Der Datenbankkontext wurde auf 'DB' geändert.

          mssql_select_db("DB", $conn)

          Warum? Ich bin doch bereits auf 'DB'.

          Wieso bist du vor mssql_select_db bereits auf „DB“?

          Eben wegen dem SQL-Statement mssql_select_db, das ich vor dem Aufruf der Prozedur abschicke.

          In deinem ersten Posting schreibst du folgenden Code:

          $conn = mssql_connect($mssqlserver, $mssqluser, $mssqlpass) or die ("Kann keine Verbindung zum MS SQL Server aufbauen");

          mssql_select_db("DB", $conn) or die ("Kann keine Verbindung zur Datenbank herstellen");

          
          >   
          > Was steht in der Variable `$mssqlserver`{:.language-php}?  
            
          Dort steht lediglich die IP-Adresse des Servers und der Port, also z.B. "10.10.7.12,1234"  
            
          
          >   
          > > > > Oder ist das einfach die letzte Meldung von MSSQL und damit kein Fehler?  
          >   
          > Laut deinem ersten Posting ist da ein Fehler.  
          >   
          > > Warning: mssql\_execute() [function.mssql-execute]: stored procedure execution failed in ...  
          >   
          > Welche zeile ist das? Was steht da drin?  
            
          Der Befehl mssql\_get\_last\_message() zeigt ja nur die letzte Message an, egal ob Fehler oder nicht.  
          Die letzte Message lautet: Der Datenbankkontext wurde auf 'DB' geändert.  
          Das klingt nicht nach einem Fehler.  
            
          Die Fehlermeldung wird für die Zeile genannt: $proc\_result = mssql\_execute($proc);  
            
          Um möglicherweise mehr Informationen zu erhalten, habe ich vorher ein ob\_start();  
          und nach der Ausführung der Prozedur  
          	$error = ob\_get\_contents();  
          	print\_r($error);  
            
          Merkwürdigerweise kann ich das Problem seitdem nicht mehr reproduzieren. Es tritt einfach kein Fehler mehr auf...  
            
          Du hast übrigens recht, dass ich noch eine recht alte PHP-Version verwende. Das liegt leider an einigen Modulen, die es für neuere Versionen (noch) nicht gibt und/oder noch nicht fehlerfrei laufen. Zudem wird es ziemlich aufwändig alle die Teile umzuschreiben, die mit der neueren Version nicht mehr unterstützt wird.  
            
            
            
          
          
          1. Fehlermeldung wird für die Zeile genannt: $proc_result = mssql_execute($proc);

            Um möglicherweise mehr Informationen zu erhalten, habe ich vorher ein ob_start();
            und nach der Ausführung der Prozedur
            $error = ob_get_contents();
            print_r($error);

            Merkwürdigerweise kann ich das Problem seitdem nicht mehr reproduzieren. Es tritt einfach kein Fehler mehr auf...

            Oh Mann, ich sollte doch erstmal einen Kaffee trinken...
            Nach einem ob_end_flush(); wird genau derselbe Fehler wieder ausgegeben...

            Also zurück zum Start... :-((

          2. Hallo

            Fehler: Der Datenbankkontext wurde auf 'DB' geändert.

            mssql_select_db("DB", $conn)

            Warum? Ich bin doch bereits auf 'DB'.

            Wieso bist du vor mssql_select_db bereits auf „DB“?

            Eben wegen dem SQL-Statement mssql_select_db, das ich vor dem Aufruf der Prozedur abschicke.

            Ok, anders herum: Wenn die Fehlermeldung *durch diese Zeile* ausgelöst wird, besteht der Fehler darin, dass der Datenbankkontext bereits vorher auf „DB“ steht.

            Was steht in der Variable $mssqlserver?

            Dort steht lediglich die IP-Adresse des Servers und der Port, also z.B. "10.10.7.12,1234"

            Aha, gut.

            Warning: mssql_execute() [function.mssql-execute]: stored procedure execution failed in ...

            Welche zeile ist das? Was steht da drin?

            Der Befehl mssql_get_last_message() zeigt ja nur die letzte Message an, egal ob Fehler oder nicht.
            Die letzte Message lautet: Der Datenbankkontext wurde auf 'DB' geändert.
            Das klingt nicht nach einem Fehler.

            Das klingt tatsächlich eher nach einer Statusmeldung, mag aber deinem ob...-basteln geschuldet sein. Das lässt zumindest dein anderes Posting vermuten.

            Du hast übrigens recht, dass ich noch eine recht alte PHP-Version verwende. Das liegt leider an einigen Modulen, die es für neuere Versionen (noch) nicht gibt und/oder noch nicht fehlerfrei laufen. Zudem wird es ziemlich aufwändig alle die Teile umzuschreiben, die mit der neueren Version nicht mehr unterstützt wird.

            Aha, ich hatte mich schon gewundert.

            Tschö, Auge

            --
            Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
            Terry Pratchett, "Wachen! Wachen!"
            ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
            Veranstaltungsdatenbank Vdb 0.3