2017-02-07 12 views
1

PHPでMSSQLストアドプロシージャを実行し、結果を取得してページにエコーしようとしています。結果は、複数の列を持つ2つの異なるレコードセットとして出力されます。 screenshotを参照してください。MSSQLストアドプロシージャから複数のレコードセット/カラムがPHPにエコーされる

いくつかの機密情報を保護するためにいくつかの変数名と出力を変更しましたが、以下のSQLコードはMSSQL Server Management Studioで実行するもので、上にリンクされた出力スクリーンショットを返します。エコーされるように、私は、データを取得するためにグーグル経由で私が見つけた他の異なるいくつかの方法を試してみた

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

は私もPHPを経由して、次のと、何の結果が返されません試してみましたPHPの配列に保存されていましたが、私が試したことはありませんでした。

MSSQL Server Management Studioで問題なく動作しますMSSQL声明私は、ストアドプロシージャを見つけて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

されている場合をあなたの接続?また、実際には 'mysqli_ *'や 'PDO'への更新を考慮する必要があります。 – nerdlyist

+0

接続情報を追加していないので、他のPHPコードの元の投稿に追加しました。 –

答えて

0

まず私のコメントが言及として、あなたが考える必要がありますmysqli_*またはPDOに更新してください。

あなたがループにそれをお勧めしますので、それが唯一の1行を返しますmssql_fetch_row行っているとき、それは、また

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

のように見え接続欠けているアップあなたの現在のセットの場合:

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

print_r($data); 
+0

ああ、うまくいった!ありがとうございました!うーん、私は更新が異なる理由で現時点で実行可能なオプションではないと思うが、いくつかのNULLエラーを回避するためにそれを追加したいと思って追加しなければならなかった: mssql_query( 'set ANSI_NULL_DFLT_ON ON'、$接続); –

関連する問題