2017-02-07 1 views
1

J'essaie d'exécuter une procédure stockée MSSQL avec PHP, puis de prendre des résultats et de les répercuter sur une page. Les résultats sont générés sous la forme de deux jeux d'enregistrements différents avec un groupe de colonnes. Voir screenshot. J'ai modifié certains des noms de variables et de sortie pour protéger certaines informations sensibles, mais le code SQL ci-dessous est exactement ce que je cours dans MSSQL Server Management Studio et il renvoie la capture d'écran de sortie ci-dessus.Multiple Recordset/Columns echo à PHP à partir de la procédure stockée MSSQL

J'ai aussi essayé les éléments suivants via PHP, et il retourne aucun résultat:

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); 

J'ai essayé quelques autres façons différentes que j'ai trouvé par googler pour obtenir les données à écho ou enregistré dans un tableau en PHP, mais rien que j'ai essayé n'a fonctionné.

déclaration de MSSQL qui fonctionne sans problème dans Management Studio MSSQL Server, c'est le format par défaut lorsque je trouve la procédure stockée et l'exécuter à partir MSSQL SMS:

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

Où est votre connexion? En outre, vous devriez vraiment envisager de mettre à jour 'mysqli_ *' ou 'PDO'. – nerdlyist

+0

Oups, je n'ai pas ajouté les informations de connexion, je l'ai ajouté à la publication originale au-dessus de l'autre code PHP. –

Répondre

0

D'abord comme mon commentaire vous mentionne devriez penser à mise à jour à mysqli_* ou PDO.

Pour votre configuration actuelle vous manque la connexion, il ressemble à

$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); 

Aussi, lorsque vous faites mssql_fetch_row retourne qu'une seule ligne pour que vous voulez en boucle:

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

print_r($data); 
+0

Ahh qui a fonctionné! Je vous remercie! Oui, je ne pense pas que la mise à jour soit une option viable pour différentes raisons, mais je voulais ajouter que pour contourner quelques erreurs NULL, je devais ajouter: mssql_query ('set ANSI_NULL_DFLT_ON ON', $ connexion); –