Выполнение хранимой процедуры с помощью pdo_sqlsrv - PullRequest
1 голос
/ 02 апреля 2012

Я пытаюсь выяснить, как выполнить хранимую процедуру с php5.3 / pdo_sqlsrv на сервере sql 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?

спасибо!

Ответы [ 3 ]

3 голосов
/ 06 апреля 2012

после дня поиска я нашел способ вызова 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>';
0 голосов
/ 23 августа 2013

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

0 голосов
/ 03 апреля 2012

Может быть, эта форма инструкция полезна

  // 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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...