Вызов хранимой процедуры SQL из PHP PDO - PullRequest
0 голосов
/ 10 декабря 2018

Мне нужно вызвать хранимую процедуру для вставки данных в sql, и она возвращает значение с выходным параметром

, как

CREATE PROCEDURE InsertInfo
   @userid VARCHAR(100),
   @login_time DATETIME,
   @IsSuccuess BIT,
   @loginid INT OUTPUT
   AS
   BEGIN
      INSERT INTO Audit_LoginLogoutAttempt(UserID,Login_Time, IsSuccuess, DateCreated) VALUES (@userid,@login_time,@IsSuccuess, GETDATE())
      SET @loginid = @@IDENTITY
   END
   GO

Как отправлять входные и выходные параметры с помощью PHP

  $stmt = $conn->prepare("{CALL InsertInfo(?, ?, ?, ?)}");
  $stmt->bindParam(1, $UserID);
  $stmt->bindParam(2, $LoggedInDateTime);
  $stmt->bindParam(3, $IsSuccuess);
  $stmt->bindParam(4, $get_id, PDO::PARAM_INT, 32);
  $stmt->execute();
  echo $get_id;

Я пытался вот так, но я не получаю желаемого значения от $ get_id

1 Ответ

0 голосов
/ 10 декабря 2018

Вы должны связать ваш параметр как параметр OUTPUT.Если у вас есть выходные параметры в вашей хранимой процедуре, и хранимая процедура возвращает наборы записей, вам нужно выбрать все наборы записей, чтобы получить выходные значения.

<?php

# Statement
$stmt = $conn->prepare("{CALL InsertInfo(?, ?, ?, ?)}");
$stmt->bindParam(1, $UserID);
$stmt->bindParam(2, $LoggedInDateTime);
$stmt->bindParam(3, $IsSuccuess);
$stmt->bindParam(4, $get_id, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT, PDO::SQLSRV_PARAM_OUT_DEFAULT_SIZE);
$stmt->execute();

# Fetch recordsets. Include this if your procedure returns recordsets (SELECT statements)
#do {
#   while ($row = $stmt->fetch()) {
#       // 
#   }
#} while ($stmt->nextRowset());


# Get OUTPUT parameter value
echo $get_id;

?>

Я обычно помещаю SET NOCOUNT ON в качестве первой строкив хранимой процедуре.Это препятствует тому, чтобы SQL Server передал число затронутых строк как часть набора результатов.

CREATE PROCEDURE InsertInfo
   @userid VARCHAR(100),
   @login_time DATETIME,
   @IsSuccuess BIT,
   @loginid INT OUTPUT
AS
BEGIN
    SET NOCOUNT ON
    INSERT INTO Audit_LoginLogoutAttempt(UserID,Login_Time, IsSuccuess, DateCreated) VALUES (@userid,@login_time,@IsSuccuess, GETDATE())
    SET @loginid = @@IDENTITY
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...