Пояснения:
Вам необходимо поставить SET NOCOUNT ON
в качестве первой строки в вашей хранимой процедуре, чтобы предотвратить возвращение количества строк, затронутых операторами T-SQL, как части результата. установлен. Это причина для ваших результатов NULL.
Если вы не можете изменить хранимую процедуру, используйте sqlsrv_next_result()
, чтобы сделать следующий результат активным, а затем извлекайте данные.
Как примечаниеВсегда используйте подготовленные операторы и параметризованные запросы для предотвращения внедрения SQL. В PHP Driver для SQL Server функция sqlsrv_query()
выполняет как подготовку операторов, так и их выполнение и может использоваться для выполнения параметризованных запросов.
Пример (на основе вашего кода) :
<?php
if( $conn === false ) {
echo "Connection failed.";
die( print_r( sqlsrv_errors(), true));
}
$query = "EXEC dbo.sp_Pok_Details @oe = ?, @code = ?";
$params = array(17, '5907769000409');
$getProducts = sqlsrv_query($conn, $query, $params);
if ($getProducts === false) {
die( print_r( sqlsrv_errors(), true));
}
// Just for test - make additional call(s) to get the count of the active result sets
do {
while($row = sqlsrv_fetch_array($getProducts, SQLSRV_FETCH_ASSOC)) {
echo 'Current rowset'.'<br>';
}
} while (sqlsrv_next_result($getProducts));
while ($row = sqlsrv_fetch_array($getProducts, SQLSRV_FETCH_ASSOC)) {
$returnArray[] = $row;
}
echo json_encode($returnArray);
?>