MSSQL Stored Procedure als SQL Query über PHP SQLSRV

Binary

Benutzer
Beiträge
7
Hallo zusammen,

ich würde gerne eine Stored Procedure die ich als SQL Query über Microsoft SQL Server Management Studio ansprechen kann, über PHP mittels SQLSRV ansprechen.

Folgendes funktionier bereits:

SQL-Query:
Code:
Execute SP_TPL_DeleteUser
@ExternalFieldID = 25

Über PHP
Code:
// Define the Transact-SQL query
$tsql_callSP = "{call SP_TPL_DeleteUser(?)}";
// Define the parameter array
$ExternalFieldID=25;
$params = array(
    array($ExternalFieldID, SQLSRV_PARAM_IN));
// Execute the query
$stmt = sqlsrv_query( $conn, $tsql_callSP, $params);
if( $stmt === false )
{
    echo "Error in executing statement.\n";
    die( print_r( sqlsrv_errors(), true));
}

Folgendes würde ich gerne realisieren:
SQL-Query:
Code:
DECLARE @currentDate DATETIME
    SELECT @currentDate = GETDATE()
 
EXECUTE SP_TPL_AddEditRegionUser
@ExternalFieldID = 27,
@Forename = Vorname,
@Surname = Nachname,
@Primary = '00114123',
@Secondary = 1234,
@Udetail_01 = null,
@Udetail_02 = null,
@Udetail_03 = null,
@Udetail_04 = null,
@Udetail_05 = null,
@Udetail_06 = null,
@Udetail_07 = null,
@Udetail_08 = null,
@Udetail_09 = null,
@Udetail_10 = null,
@Udetail_11 = null,
@RegionName = null,
@ActiveFlag = 1,
@ActiveDate = null,
@ExpiryDate = null,
@AccessLevels = 0000000001

Versuch über PHP
Code:
// Define the Transact-SQL query
$tsql_callSP = "{call SP_TPL_AddEditRegionUser(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,)}";
// Define the parameter array
$ExternalFieldID = 26;
$Forename = 'Kian';
$Surname = 'Salem';
$Primary = '00114123';
$Secondary = 1234;
$Udetail_01 = null;
$Udetail_02 = null;
$Udetail_03 = null;
$Udetail_04 = null;
$Udetail_05 = null;
$Udetail_06 = null;
$Udetail_07 = null;
$Udetail_08 = null;
$Udetail_09 = null;
$Udetail_10 = null;
$Udetail_11 = null;
$RegionName = null;
$ActiveFlag = 1;
$ActiveDate = null;
$ExpiryDate = null;
$AccessLevels = 0000000001;
 
$params = array(
    array($ExternalFieldID, SQLSRV_PARAM_IN),
    array($Forename, SQLSRV_PARAM_IN),
    array($Surname, SQLSRV_PARAM_IN),
    array($Primary, SQLSRV_PARAM_IN),
    array($Secondary, SQLSRV_PARAM_IN),
    array($Udetail_01, SQLSRV_PARAM_IN),
    array($Udetail_02, SQLSRV_PARAM_IN),
    array($Udetail_03, SQLSRV_PARAM_IN),
    array($Udetail_04, SQLSRV_PARAM_IN),
    array($Udetail_05, SQLSRV_PARAM_IN),
    array($Udetail_06, SQLSRV_PARAM_IN),
    array($Udetail_07, SQLSRV_PARAM_IN),
    array($Udetail_08, SQLSRV_PARAM_IN),
    array($Udetail_09, SQLSRV_PARAM_IN),
    array($Udetail_10, SQLSRV_PARAM_IN),
    array($Udetail_11, SQLSRV_PARAM_IN),
    array($RegionName, SQLSRV_PARAM_IN),
    array($ActiveFlag, SQLSRV_PARAM_IN),
    array($ActiveDate, SQLSRV_PARAM_IN),
    array($ExpiryDate, SQLSRV_PARAM_IN),
    array($AccessLevels, SQLSRV_PARAM_IN));
// Execute the query
$stmt = sqlsrv_query( $conn, $tsql_callSP, $params);
if( $stmt === false )
{
    echo "Error in executing statement.\n";
    die( print_r( sqlsrv_errors(), true));
}

Die Rückmeldung lautet:
Error in executing statement. Array ( [0] => Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 201 => 201 [2] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Die Prozedur oder Funktion 'SP_TPL_AddEditRegionUser' erwartet den @AccessLevels-Parameter, der nicht bereitgestellt wurde. [message] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Die Prozedur oder Funktion 'SP_TPL_AddEditRegionUser' erwartet den @AccessLevels-Parameter, der nicht bereitgestellt wurde. ) )
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.579
Kannst du eventuell noch den Code der SP posten? Mir scheint hier stimmt die Reihenfolge oder Anzahl oder das Format der übergebenen Parameter nicht.
 

Binary

Benutzer
Beiträge
7
Einen schönen guten Morgen :)
Vielen Dank für deinen Vorschlag.
Das SQL-Query funktioniert allerdings einwandfrei.
Die SP ist Teil einer Software eines Schlüsselschranks für das ich gerade programmiere.
Sie umfasst mehrere Seiten und ich befürchte gegen geltende Copyright-Gesetze zu verstoßen, wenn ich diese hier poste.
 

ukulele

Datenbank-Guru
Beiträge
4.579
Dann empfehle ich dir, den Teil der SP mit deklarierten Variablen zu kopieren und eine neue SP zum testen anzulegen. Einfach alle Variablen der SP übergeben und einen belibigen Wert wieder zurück geben.
 

Tommi

Datenbank-Guru
Beiträge
285
Hi,

ich habe in der Zeile
Code:
$tsql_callSP = "{call SP_TPL_AddEditRegionUser(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,)}";
nur 20 "?" gezählt, aber es sollen 21 Parameter übergeben werden!

Das sagt auch die Fehlermeldung
erwartet den @AccessLevels-Parameter, der nicht bereitgestellt wurde


Viele Grüße,
Tommi
 
Werbung:
Oben