Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

MSSQL Stored Procedure als SQL Query über PHP SQLSRV

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Binary, 28 Januar 2013.

  1. Binary

    Binary Benutzer

    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. ) )
     
  2. ukulele

    ukulele Datenbank-Guru

    Kannst du eventuell noch den Code der SP posten? Mir scheint hier stimmt die Reihenfolge oder Anzahl oder das Format der übergebenen Parameter nicht.
     
  3. Binary

    Binary Benutzer

    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.
     
  4. ukulele

    ukulele Datenbank-Guru

    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.
     
  5. Tommi

    Tommi Datenbank-Guru

    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


    Viele Grüße,
    Tommi
     
  6. Binary

    Binary Benutzer

    Tatsächlich!
    Daran lag es!
    Vielen vielen vielen Dank!
    Ich glaube ich hätte mir sonst die Zähne daran ausgebissen!
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden