Мне нужно вызвать хранимую процедуру, чтобы вставить данные в 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






Вы должны связывать свой параметр как параметр ВЫХОДА. Если у вас есть выходные параметры в вашей хранимой процедуре и хранимая процедура возвращает наборы записей, вам необходимо получить все наборы записей, чтобы получить выходные значения.
<?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 results. Include this if your procedure returns resultsets (usually from SELECT statements):
#do {
# while ($row = $stmt->fetch()) {
# //
# }
#} while ($stmt->nextRowset());
# Get OUTPUT parameter value
echo $get_id;
?>
Я обычно помещаю ВКЛЮЧИТЬ NOCOUNT в первую строку в хранимых процедурах. Это предотвращает передачу 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