Intereting Posts
Как получить параметр и значения строки запроса с помощью javascript (JQuery)? Заполните раскрывающийся список из таблицы mySQL в PHP Когда я вызываю bind_param, если вы используете подготовленные команды MySQLi в цикле? Загрузить массив через вложенные петли foreach в PHP? Почему один и тот же ввод возвращает два разных хеша MD5? объявление атрибута класса Класс автозагрузчика в плагине WordPress Проверка правильности формы php-codeigniter ajax Упаковка, кеширование, JS и CSS в PHP, которые различают среду разработки и производства Убедитесь, что пользователь вошел в систему с изменением страницы ajax Объяснение видимости и наследования членов класса PHP Как настроить почтовую функцию PHP в Windows Vista? PHP CLI не использует stderr для вывода ошибок PHP MVC – Как контроллер и просмотр могут обращаться к одному экземпляру модели? Xero API – Как получить счета между двумя датами

Выполнение хранимой процедуры с помощью pdo_sqlsrv

Я пытаюсь выяснить, как выполнить хранимую процедуру с помощью php5.3 / pdo_sqlsrv на SQL Server 2008.

Я нашел этот код:

$sql = new PDO( "sqlsrv:server=$server;Database = $database", $user, $password); $query = "{? = CALL sp_Login(?, ?)}"; $stmt = $sql->prepare( $query ); $returnVariable = 0; $inputVariable1 = 'input1'; $inputVariable2 = 'input2'; $stmt->bindParam(1,$returnVariable,PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT,100); $stmt->bindParam(2,$inputVariable1,PDO::PARAM_STR); $stmt->bindParam(3,$inputVariable2,PDO::PARAM_STR); $stmt->execute(); echo "Return value: ".$returnVariable; 

хранимая процедура имеет два входа и один выходной параметр, но кажется, что он ничего не возвращает, возвращаемое значение все равно 0 ..

Я могу запускать запросы выбора / вставки, поэтому это не соединение.

Есть ли хорошая документация о хранимых процедурах с pdo_sqlsrv?

благодаря!

после дня поиска я нашел способ вызова sp … проблема заключалась в том, что в хранимой процедуре был запущен запрос на вставку, и мне пришлось вызвать nextRowset (), чтобы получить возвращаемое значение

http://social.msdn.microsoft.com/Forums/en/sqldriverforphp/thread/55f21fc5-dbc0-4fe4-a4ae-f15905a4293a

 $sql = new PDO( "sqlsrv:server=$server;Database = $database", $user, $password); $input1 = "input1"; $input2 = "input2"; $return_value = -1; $proc = '{? = CALL sp_Name (?, ?) }'; $stmt = $sql->prepare( $proc ); $stmt->bindParam(1,$return_value ,PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT,4); $stmt->bindParam(2,$input1,PDO::PARAM_STR); $stmt->bindParam(3,$input2,PDO::PARAM_STR); $stmt->nextRowset(); //skip INSERT result $result = $stmt->fetch(PDO::FETCH_ASSOC); /* Display the value of the output parameter */ echo "Return value: ".$return_value.'<br>'; 

Возможно, эта форма поможет

  // Example #4 Calling a stored procedure with an output parameter $stmt = $dbh->prepare("CALL sp_returns_string(?)"); $stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000); $stmt->execute(); print "procedure returned $return_value\n"; // Example #5 Calling a stored procedure with an input/output parameter $stmt = $dbh->prepare("CALL sp_takes_string_returns_string(?)"); $value = 'hello'; $stmt->bindParam(1, $value, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000); $stmt->execute(); print "procedure returned $value\n"; 

В вашем сохраненном proc необходимо было включить инструкцию «SET NOCOUNT ON», так что инструкция Insert внутри не требовала вызова метода nextRowset ().