Timoshka
Guest
PHP и хранимые процедуры в MSSQL
Здравствуйте, подскажите, как решить проблему, уже голову на этом поломал.
Есть код:
Проблема в правильном получении RETVAL. Этот код правильно работает только в случае, если ХП не возвращает никаких наборов данных (result set), входные и выходные параметры могут быть.
К примеру:
Но если result set есть, типа:
то RETVAL будет пустой.
Поискав немного в инете решения проблемы, я выяснил, что RETVAL всегда находится в последнем рекодсете, до которого можно добраться с использованием конструкции вида:
Действительно, если вставить эту строку перед выводом RETVAL, то все вроде бы работает. Но(!): после этой строки становятся недоступными данные из предыдущих рекодсетов.
Задача, которую я не могу решить. Моя ХП всегда возвращает 0, если процедура отработала успешно, и >0 - с ошибкой (ошибка может быть не критичной). Необходимо написать функцию на PHP, которая бы обрабатывала ошибку и в случае RETVAL=0 возвращала record set (хотя бы первый), если он есть.
Если кто с этим сталкивался, подскажите или дайте линку, где почитать. Спасибо.
Здравствуйте, подскажите, как решить проблему, уже голову на этом поломал.
Есть код:
PHP:
$s = @mssql_connect($myServer, $myUser, $myPass)
or die("Couldn't connect to SQL Server on $myServer");
$d = @mssql_select_db($myDB, $s)
or die("Couldn't open database $myDB");
$retval = 0;
$stmn = mssql_init("sp_test", $s);
mssql_bind($stmn, "RETVAL", &$retval, SQLINT2);
$res = mssql_execute($stml);
echo 'Return value: '.$retval;
К примеру:
PHP:
CREATE PROC sp_test
AS
RETURN 10;
PHP:
CREATE PROC sp_test
AS
select GetDate();
RETURN 10;
Поискав немного в инете решения проблемы, я выяснил, что RETVAL всегда находится в последнем рекодсете, до которого можно добраться с использованием конструкции вида:
PHP:
while (mssql_next_result($res));
Задача, которую я не могу решить. Моя ХП всегда возвращает 0, если процедура отработала успешно, и >0 - с ошибкой (ошибка может быть не критичной). Необходимо написать функцию на PHP, которая бы обрабатывала ошибку и в случае RETVAL=0 возвращала record set (хотя бы первый), если он есть.
Если кто с этим сталкивался, подскажите или дайте линку, где почитать. Спасибо.