代码之家  ›  专栏  ›  技术社区  ›  heisenberg

在事务中使用php pdo获取存储过程out参数的值[重复]

  •  0
  • heisenberg  · 技术社区  · 6 年前

    所以我有一个PHP脚本,它使用一个存储过程来与我的SQL数据库交互。存储过程工作得很好,问题是我不知道如何让PHP从存储过程中返回值。存储过程基本上是使用激活密钥激活帐户,并设置用户名和密码。

    它基本上说“如果提供的激活密钥还没有用户名,将其设置为提供的并返回1,如果已经有用户名返回2,如果激活密钥不存在,则返回3”。它在SQL中工作得很好,甚至给出了正确的返回值。现在,我如何让我的PHP回响这一点呢?我尝试了以下方法:

    $link = sqlsrv_connect($myServer, array('Database' => $myDB, 'UID' => $myUser, 'PWD' => $myPass));
    if($link === FALSE) {
        die('Could not connect: ' . sqlsrv_errors(SQLSRV_ERR_ALL));
    }
    
    $key = $_REQUEST['key'];
    $username = $_REQUEST['username'];
    $password = $_REQUEST['password'];
    
    $query = "EXEC Activate_Account";
    $query .=" @key = ";
    $query .= $key;
    $query .=", @user = ";
    $query .= $username;
    $query .=", @pass = ";
    $query .= $password;
    
    $result = sqlsrv_query($link, $query);
    
    while($row = sqlsrv_fetch_array($result))
    {
        echo $row[0];
    }
    
    sqlsrv_close($link);
    

    while($row = sqlsrv_fetch_array($result))
    {
        echo $row['Return Value'];
    }
    

    他们两个都没有回音。

    0 回复  |  直到 8 年前
        1
  •  3
  •   doydoy44    8 年前

    要返回带有存储过程的值,请执行以下操作:

    例如:

    SQL:

    CREATE DEFINER=`user`@`localhost` PROCEDURE `ProcedureName`(IN `Input_Value` INT, OUT `Out_val` INT)
        LANGUAGE SQL
        NOT DETERMINISTIC
        CONTAINS SQL
        SQL SECURITY DEFINER
        COMMENT ''
    BEGIN
    // Your SQL Code
    
        SET Out_val= Your Value;
        SELECT Out_val;
    END
    

    PHP代码:

    $insert = "CALL ProcedureName(:Input_Value,
                                 @Out_val)";
    $bdd = new PDO('mysql:host=localhost;dbname=db-name', 'user', 'password');
    
    $stmt = $bdd->prepare($insert);     
    $stmt->bindParam(':Input_Value', $an_input_value, PDO::PARAM_STR); 
    
    $stmt->execute();
    $tabResultat = $stmt->fetch();
    $Out_val = $tabResultat['Out_val'];
    var_dump($Out_val);