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')
);
SQL管理スタジオでProcを正常に実行できます。私はまた、提案されたように私の質問にすべてのプレースホルダー( '?')を言及しましたが、私はまだ空の出力を取得します。 –
@shasikanth私は、パラメータがSQLSRV_PARAM_INではなく、SQLSRV_PARAM_OUTとしてマークされていることに気付きました。 – Canis
SQLSRV_PARAM_OUTとしてparamsを指定しました。しかし、私はこのエラーメッセージを受け取りました:無効なPHP型が出力パラメータとして指定されました。 DateTimeオブジェクト、NULL値、およびストリームを出力パラメータとして指定することはできません。 –