【问题标题】:Call SQL Stored Procedure from PHP PDO从 PHP PDO 调用 SQL 存储过程
【发布时间】:2019-05-11 08:52:48
【问题描述】:

我需要调用一个存储过程来将数据插入到 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 sql sql-server stored-procedures pdo


    【解决方案1】:

    您应该将bind 您的参数作为 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 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;
    
    ?>
    

    我通常将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
    

    【讨论】:

      猜你喜欢
      • 2014-09-07
      • 2017-08-09
      • 2014-07-07
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 2015-09-25
      • 2017-09-17
      相关资源
      最近更新 更多