[gelöst] Stored Procedure, MSSQL und Output

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

  • [gelöst] Stored Procedure, MSSQL und Output

    Hi.

    Beschäftige mich gerade mit Stored Procedures in MSSQL und habe folgende Stored Procedure:

    Code:
    USE [xxx]
    GO
    
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[erstelleBenutzer] ( 
      @Login varchar(50),
      @Passwort varchar(100),
      @EMail varchar(250),
      @Aktivierungscode uniqueidentifier OUTPUT
    )
    AS BEGIN
    
      INSERT INTO
      T_Benutzer
      (
        Login,
        Passwort,
        EMail
      )
      SELECT
        @Login,
        @Passwort,
        @EMail
        
      SELECT @Aktivierungscode = (SELECT Aktivierungscode FROM T_Benutzer WHERE ID = SCOPE_IDENTITY())
    END
    Die versuche ich jetzt einfach mit folgendem PHP Test-Skript aufzurufen:

    Code:
    //...bisher werden nur Testwerte übergeben (Benutzer1, geheim...usw)
      $conn=mssql_connect ("localhost", "xxx", "xxx") or die("Kein Connect");
      $tmp=mssql_select_db("xxx", $conn);
      $proc=mssql_init("erstelleBenutzer", $conn);
      mssql_bind($proc, "@Login", "Benutzer1", SQLVARCHAR, false, false, 50);
      mssql_bind($proc, "@Passwort", "geheim", SQLVARCHAR, false, false, 100);
      mssql_bind($proc, "@EMail", "abc@cde.de", SQLVARCHAR, false, false, 250);
      mssql_bind($proc, "@Aktivierungscode", "", SQLVARCHAR, true, false, 250); //true, wegen Rückgabe Output
      $result=mssql_execute ($proc);
      mssql_free_statement($proc);
    //...
    Wie bekomme ich jetzt den Aktivierungscode in eine Variable zurück?
    Hintergrund: baue einen Loginbereich mit Registrierung. Wenn der User sich registriert, werden seine Daten in der Datenbank hinterlegt und von MSSQL eine eindeutige Zeichenkette erstellt, die ich dem User an seine Mail Adresse schicke. Durch klick auf den enthaltenen Link soll er dann seinen Account freischalten. Also eigentlich nichts besonderes.

    Da ich das erste mal mit Stored Procedures in Kombination mit MSSQL arbeite, bin ich für jede Anmerkung, Tipps und Verbesserungsvorschläge dankbar.

    mfg streuner

    P.S. Läuft über den neuesten Apache & PHP 5.
    P.P.S. error_reporting(E_ALL); gibt auch nichts aus. Es wird immer Fehler 500 (Fehler im Skript angezeigt)!
    Zuletzt geändert von streuner; 29.10.2009, 09:52.
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
    der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

    "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

  • #2
    Hallo,

    aus

    Code:
    SELECT @Aktivierungscode = (SELECT Aktivierungscode FROM T_Benutzer WHERE ID = SCOPE_IDENTITY())
    würde ich erstmal

    Code:
    SELECT @Aktivierungscode = Aktivierungscode FROM T_Benutzer WHERE ID = SCOPE_IDENTITY()
    machen. Wenn du meintest, wie du den Wert nach PHP bekommst: nach dem Aufruf der Procedure kannst du ihn einfach per Select holen.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Zitat von AmicaNoctis Beitrag anzeigen
      Hallo,

      aus

      Code:
      SELECT @Aktivierungscode = (SELECT Aktivierungscode FROM T_Benutzer WHERE ID = SCOPE_IDENTITY())
      würde ich erstmal

      Code:
      SELECT @Aktivierungscode = Aktivierungscode FROM T_Benutzer WHERE ID = SCOPE_IDENTITY()
      machen.
      Ok. Warum, wenn ich mal blöd fragen darf? Ist die Syntax falsch?

      Zitat von AmicaNoctis Beitrag anzeigen
      Wenn du meintest, wie du den Wert nach PHP bekommst: nach dem Aufruf der Procedure kannst du ihn einfach per Select holen.
      Ah ok. Mit $result=mssql_execute ($proc); rufe ich die Stored Procedure ja auf und danach mache ich ein SELECT darauf und frage den Aktivierungscode ab? Danke Dir.


      mfg streuner
      Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
      der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

      "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

      Kommentar


      • #4
        Zitat von streuner Beitrag anzeigen
        Ok. Warum, wenn ich mal blöd fragen darf? Ist die Syntax falsch?
        Die Syntax nicht, aber aus Performancegründen vermeidet man Subselects, vor allem, wenn die (wie in diesem Falle) keinen sonstigen Mehrwert haben.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Ok, super Dir!

          mfg streuner
          Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
          der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

          "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

          Kommentar

          Lädt...
          X