PHP получает пустой вывод с вызовом хранимой процедуры SQL Server

Я пытаюсь вызвать хранимую процедуру на MS SQL Server, но я получаю пустой результат. Хранимая процедура принимает идентификатор пользователя в качестве входного параметра и выводит имя, адрес, город, штат и почтовый индекс пользователя.

Вот запрос на выполнение хранимой процедуры в SQL Server Management Studio:

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

До сих пор я пробовал следующий код:

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

Я думаю, что весь мой синтаксис правильный. Но я получаю пустой вывод. Не уверен, что я делаю не так.

РЕДАКТИРОВАТЬ:

Я изменил параметры массива запроса следующим образом, но безуспешно:

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

1

Решение

Можете ли вы успешно запустить процесс в SQL Management Studio? Выглядит так, как будто вам не хватает некоторых заполнителей в вашем SQL в PHP. Только один ? в запросе. Возможно, это лучше?

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

Я не очень знаком с хранимыми процессами такого рода, но с параметризованными заполнителями в подготовленных выражениях необходимо указывать все заполнители в правильном порядке. Из того, что вы опубликовали, мне кажется, что вы не добавляете заполнители во всех местах, где это необходимо, и, возможно, именно поэтому вы не получаете результат обратно?

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector