2017-08-10 5 views
1

MS SQL Serverでストアドプロシージャを呼び出そうとしていますが、空の結果が出ます。ストアドプロシージャは、入力パラメータとしてユーザーIDを取り、ユーザーの名前、住所、市区町村、州および郵便番号を出力します。ここでSQL Serverストアドプロシージャコールで空の出力が得られるPHP

は、SQL Server Management Studioの上のストアドプロシージャの実行クエリです:私はすべての私の構文が正しいことだと思う

<?php 
$conn = sqlsrv_connect($host, $connectionInfo); 
$user_id = 'AB1234'; 
$myparams['UserID'] = $user_id; 

$procedure_params = array(
    array(&$myparams['UserID'], SQLSRV_PARAM_IN), 
    array(&$myparams['Name'], SQLSRV_PARAM_IN), 
    array(&$myparams['Address'], SQLSRV_PARAM_IN), 
    array(&$myparams['City'], SQLSRV_PARAM_IN), 
    array(&$myparams['State'], SQLSRV_PARAM_IN), 
    array(&$myparams['Zip'], SQLSRV_PARAM_IN) 
); 

$sql = "EXEC spAddressByUserID @UserID = ?, @Name = '', @Address = '', @City = '', @State = '', @Zip = ''"; 

$stmt = sqlsrv_prepare($conn, $sql, $procedure_params); 

if(!$stmt) { 
    die(print_r(sqlsrv_errors(), true)); 
} 

if(sqlsrv_execute($stmt)){ 
    while($res = sqlsrv_next_result($stmt)){ 
    print_r($res); // Gives Empty Output 
    } 
} 
else{ 
    die(print_r(sqlsrv_errors(), true)); 
} 

USE [MYDB] 
GO 
DECLARE @return_value int, 
     @Name char(60), 
     @Address char(60), 
     @City char(30), 
     @State char(3), 
     @Zip char(10) 

EXEC @return_value = [dbo].[spAddressByUserID] 
     @UserID = N'AB1234', 
     @Name = @Name OUTPUT, 
     @Address = @Addr1 OUTPUT, 
     @City = @City OUTPUT, 
     @State = @State OUTPUT, 
     @Zip = @Zip OUTPUT 

SELECT @Name as N'@Name', 
     @Address as N'@Address', 
     @City as N'@City', 
     @State as N'@State', 
     @Zip as N'@Zip' 

SELECT 'Return Value' = @return_value 
GO 

はこれまでのところ、私は次のコードを試してみました。しかし、私は空の出力を得る。私が間違っていることを確認していない。

EDIT:

ノー成功を収めて、このようなクエリの配列パラメータを変更した:

$procedure_params = array(
    array(&$myparams['UserID'], SQLSRV_PARAM_IN, 'SQLSRV_PHPTYPE_STRING'), 
    array(&$myparams['Name'], SQLSRV_PARAM_OUT, 'SQLSRV_PHPTYPE_STRING'), 
    array(&$myparams['Address'], SQLSRV_PARAM_OUT, 'SQLSRV_PHPTYPE_STRING'), 
    array(&$myparams['City'], SQLSRV_PARAM_OUT, 'SQLSRV_PHPTYPE_STRING'), 
    array(&$myparams['State'], SQLSRV_PARAM_OUT, 'SQLSRV_PHPTYPE_STRING'), 
    array(&$myparams['Zip'], SQLSRV_PARAM_OUT, 'SQLSRV_PHPTYPE_STRING') 
); 

答えて

0

あなたは成功したSQL管理スタジオでPROCを実行することができますか?また、PHPのSQLでいくつかのプレースホルダが欠落しているように見えます。クエリ内に1つだけ?。おそらくこれは良いですか?

$sql = "EXEC spAddressByUserID @UserID = ?, @Name = '?', @Address = '?', @City = '?', @State = '?', @Zip = '?'"; 

私はこの種の保存procsのに非常に慣れていないんだけど、準備された文でパラメータのプレースホルダで、あなたは正しい順序で、すべてのプレースホルダを指定する必要があります。投稿した内容から、プレースホルダを必要な場所に追加していないように見えます。そのため、出力が戻ってこない理由は何でしょうか?

+0

SQL管理スタジオでProcを正常に実行できます。私はまた、提案されたように私の質問にすべてのプレースホルダー( '?')を言及しましたが、私はまだ空の出力を取得します。 –

+0

@shasikanth私は、パラメータがSQLSRV_PARAM_INではなく、SQLSRV_PARAM_OUTとしてマークされていることに気付きました。 – Canis

+0

SQLSRV_PARAM_OUTとしてparamsを指定しました。しかし、私はこのエラーメッセージを受け取りました:無効なPHP型が出力パラメータとして指定されました。 DateTimeオブジェクト、NULL値、およびストリームを出力パラメータとして指定することはできません。 –

関連する問題