2017-02-07 2 views
1

Ich versuche, eine gespeicherte MSSQL-Prozedur mit PHP auszuführen und dann Ergebnisse und echo sie auf eine Seite. Die Ergebnisse werden als zwei verschiedene Recordsets mit einer Reihe von Spalten ausgegeben. Siehe screenshot.Mehrere Recordset/Spalten Echo zu PHP von MSSQL gespeicherte Prozedur

Ich habe einige der Variablennamen geändert und ausgegeben, um einige vertrauliche Informationen zu schützen, aber der folgende SQL-Code ist genau das, was ich in MSSQL Server Management Studio ausführe, und es gibt den oben verlinkten Ausgabe-Screenshot zurück.

Ich habe versucht, auch die folgenden über PHP und es wird keine Ergebnisse Rückkehr:

if ([email protected]_connect($host,$username,$password)) { 
    $error = $db_connect_error; 
    echo $error; 
} 
@mssql_select_db($dbname); 
$stmt=mssql_init("[dbo].[stored_procedure_name]"); 
mssql_bind($stmt, "@StartTime", $start_last, SQLVARCHAR, FALSE); 
mssql_bind($stmt, "@EndTime", $end_last, SQLVARCHAR, FALSE); 
mssql_bind...continued for all variables 
$result = mssql_execute($stmt); 
$arr = mssql_fetch_row($result); 
print_r($arr); 

ich ein paar andere verschiedene Möglichkeiten ausprobiert habe ich über Googeln gefunden habe, die Daten zu erhalten, werden hallte oder in einem Array in PHP gespeichert, aber nichts, was ich versucht habe, hat funktioniert.

MSSQL-Anweisung, die in MSSQL Server Management Studio ohne Probleme läuft, dies ist das Standardformat, wenn ich die gespeicherte Prozedur finden und von MSSQL SMS laufen:

DECLARE @RC int 
DECLARE @StartTime datetime 
DECLARE @EndTime datetime 
DECLARE @a varchar(4000) 
DECLARE @b varchar(4000) 
DECLARE @c varchar(50) 
DECLARE @d varchar(50) 
DECLARE @e varchar(50) 
DECLARE @f varchar(50) 
DECLARE @g int 
DECLARE @h int 
DECLARE @i int 
DECLARE @j int 
DECLARE @k int 
DECLARE @l int 
DECLARE @m int 
DECLARE @n int 
DECLARE @o int 
DECLARE @p int 
DECLARE @q int 
DECLARE @r varchar(100) 
DECLARE @s int 
DECLARE @t float 
DECLARE @u float 
DECLARE @v float 
DECLARE @w int 

-- TODO: Set parameter values here. 

SET @StartTime = '2017-02-01 07:30' 
SET @EndTime = '2017-02-01 19:30' 
SET @a = 'string' 
SET @b = 'string' 
SET @c = 'string' 
SET @d = 'string' 
SET @e = 'string' 
SET @f = 'string' 
SET @g = 105 
SET @h = 108 
SET @i = 101 
SET @j = 147 
SET @k = 124 
SET @l = 141 
SET @m = 103 
SET @n = 186 
SET @o = 185 
SET @p = 113 
SET @q = 182 
SET @r = 'string' 
SET @s = 77 
SET @t = 101.5 
SET @u = 1000 
SET @v = 25.4 
SET @w = 1 

EXECUTE @RC = [dbo].[spLocal_RptCvtgLinestatus] 
    @StartTime 
    ,@EndTime 
    ,@a 
    ,@b 
    ,@c 
    ,@d 
    ,@e 
    ,@f 
    ,@g 
    ,@h 
    ,@i 
    ,@j 
    ,@k 
    ,@l 
    ,@m 
    ,@n 
    ,@o 
    ,@p 
    ,@q 
    ,@r 
    ,@s 
    ,@t 
    ,@u 
    ,@v 
    ,@w 
+0

Wo liegt Deine Verbindung? Außerdem sollten Sie in Betracht ziehen, auf 'mysqli_ *' oder 'PDO' zu aktualisieren. – nerdlyist

+0

Hoppla, ich habe die Verbindungsinformationen nicht hinzugefügt, ich habe sie dem ursprünglichen Beitrag über dem anderen PHP-Code hinzugefügt. –

Antwort

0

Erst als mein Kommentar erwähnt, sollten Sie darüber nachdenken, Aktualisierung auf mysqli_* oder PDO.

Für Ihre aktuelle Einrichtung fehlen die Verbindung sieht es

wie
$connection = mssql_connect($servername, $username, $password); 
//Select a db 
mssql_select_db('your_db_name', $connection); 

//Use the connection. I do not think you need to fully qualify the sproc name. 
$stmt = mssql_init('stored_procedure_name', $connection); 

Auch wenn dabei mssql_fetch_row es nur eine Zeile zurückgibt, so dass Sie es in einer Schleife wollen:

$data = array(); 
while ($row = mssql_fetch_row($result)){ 
    $data[] = $row; 
} 

print_r($data); 
+0

Ahh das hat funktioniert! Vielen Dank! Ja, ich denke nicht, dass die Aktualisierung zu diesem Zeitpunkt aus verschiedenen Gründen eine praktikable Option ist, aber ich wollte hinzufügen, dass um NULL Fehler zu umgehen, ich hinzufügen musste: mssql_query ('set ANSI_NULL_DFLT_ON ON', $ Verbindung); –

Verwandte Themen