简体   繁体   English

从 PHP PDO 调用 SQL 存储过程

[英]Call SQL Stored Procedure from PHP PDO

I need to call a stored procedure to insert the data to sql and it return a value with output parameter我需要调用一个存储过程将数据插入 sql 并返回一个带有输出参数的值

like喜欢

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

How to send input and output parameters using PHP如何使用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;

I tried like this but I'm not getting desired value from $get_id我试过这样,但我没有从 $get_id 获得所需的价值

You should bind your parameter as an OUTPUT parameter.您应该参数绑定为 OUTPUT 参数。 If you have output parameters in your stored procedure and stored procedure returns recordsets, you need to fetch all recordsets to get output values.如果存储过程中有输出参数并且存储过程返回记录集,则需要获取所有记录集以获取输出值。

<?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;

?>

I usually put SET NOCOUNT ON as first line in stored procedures.我通常将SET NOCOUNT ON作为存储过程中的第一行。 This prevents SQL Server from passing the count of rows affected as part of the result set.这可以防止 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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM