ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

使用PHP从SQL存储过程获取返回值

2019-11-22 00:33:04  阅读:269  来源: 互联网

标签:return-value sql php sql-server stored-procedures


因此,我有一个使用存储过程与SQL数据库进行交互的php脚本.存储过程工作正常,问题是我不知道如何使我的PHP响应存储过程的返回值.该存储过程基本上是使用激活密钥来激活帐户并设置用户名和密码.

它基本上说:“如果提供的激活密钥还没有用户名,请将其设置为提供的用户名,然后返回RETURN 1;如果已经具有用户名RETURN 2,并且激活密钥不存在,则返回RETURN 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'];
}

他们俩都没有回声.

解决方法:

要使用存储过程返回值:

例如:

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

标签:return-value,sql,php,sql-server,stored-procedures
来源: https://codeday.me/bug/20191121/2055650.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有