| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

29-10-2009, 08:58
|
|
streuner
Registrierter Benutzer
|
|
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 461
|
|
[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)!
__________________
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 ---"
Geändert von streuner (29-10-2009 um 09:52 Uhr)
|

29-10-2009, 10:31
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
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
|

29-10-2009, 10:50
|
|
streuner
Registrierter Benutzer
|
|
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 461
|
|
Zitat:
Zitat von AmicaNoctis
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:
Zitat von AmicaNoctis
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 ---"
|

29-10-2009, 10:56
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Zitat:
Zitat von streuner
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.
|

29-10-2009, 10:59
|
|
streuner
Registrierter Benutzer
|
|
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 461
|
|
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 ---"
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|