2015-01-09 2 views
2

Я совершенно новый, просто делаю из-за запроса босса. Поэтому у меня есть проблема, о которой я хочу спросить.SQLSRV вызывает хранимую процедуру на SQL-сервере

Это результат, когда я называю SP в SQL

enter image description here

Ниже код вызова SP в PHP

$ma_dvcs = 'OL'; 
$ngay = '01/2/2015'; 
$ma_kho = 'BPOL01'; 
$ma_nhvt = ''; 
$ma_vt = '24110012A2140850'; 
$kieu = '1'; 
$query = "{call Tondaulist (@p_Ma_Dvcs_List = ?,@p_Ngay = ?,@p_Ma_Kho = ?,@p_Ma_Nh_Vt = ?,@p_Ma_Vt = ?,@p_Kieu = ?)}"; 

$params = array(
       array(&$ma_dvcs, SQLSRV_PARAM_IN), 
       array(&$ngay, SQLSRV_PARAM_IN), 
       array(&$ma_kho, SQLSRV_PARAM_IN), 
       array(&$ma_nhvt, SQLSRV_PARAM_IN), 
       array(&$ma_vt, SQLSRV_PARAM_IN), 
       array(&$kieu, SQLSRV_PARAM_IN) 
       ); 

$smtp = sqlsrv_prepare($conn, $query, $params); 

if($smtp === false) 
{ 
    echo "Error in executing statement 3.\n"; 
    die(print_r(sqlsrv_errors(), true)); 
} 
$rows = sqlsrv_execute($smtp); 
var_dump($rows);die; 
$arr[] = sqlsrv_fetch_array($rows,SQLSRV_FETCH_ASSOC); 

SQLSRV Exec var_dump возвращает истину, но я не могу выборки ничего и сохраняют ошибку:

The active result for the query contains no fields 

or

sqlsrv_fetch_array() expects parameter 1 to be resource, boolean given 

Так что я хочу знать, что SP работает так же, как функция в php или нет? Если да, может ли он вернуть массив или может просто возвращать логическое значение и как получить этот массив?

Спасибо заранее

ответ

1

Попробуйте изменить запрос к этому

$query = "EXEC Tondaulist @p_Ma_Dvcs_List = ?,@p_Ngay = ?,@p_Ma_Kho = ?,@p_Ma_Nh_Vt = ?,@p_Ma_Vt = ?,@p_Kieu = ?"; 

Это не будет возвращать «массив» SQL не поддерживает массивы, но он возвращает результирующий набор Вы также необходимо изменить sqlsrv_execute вызова на sqlsrv_query

Там пример цикла через результат SQL установлен здесь PHP MSSQL - How To Loop through Returning Rows?

Надеюсь, что поможет

+0

спасибо за ответ, но как я могу получить этот набор результатов и распечатать его –

+0

уже изменил мой запрос, но все тот же –

+0

он продолжает возвращать: активный результат для запроса не содержит полей. странно, похоже, что он просто возвращает логическое значение. –

0

Вам необходимо изменить код, как я упоминал ниже. Использовать stmp как аргумент метода sqlsrv_fetch_array.

if(sqlsrv_execute($smtp)){ 
    print "success"; 
    while($row = sqlsrv_fetch_array($smtp)){ 
     print_r($row); 
     print "<br />"; 
    } 
}else{ 
    print_r(sqlsrv_errors()); 
} 

, если вы все еще не можете это сделать, сообщите мне, с каковой проблемой вы столкнулись с этим кодом.

Смежные вопросы