所以我有一个php脚本,它使用存储过程与我的SQL数据库进行交互。存储过程工作正常,问题是我不知道如何让我的PHP从存储过程回显返回值。存储过程基本上是使用激活密钥激活帐户并设置用户名和密码。
它基本上说“如果提供的激活密钥还没有用户名,请将其设置为提供的用户名和RETURN 1,如果已经有用户名RETURN 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 :(得分:3)
使用存储过程返回值:
例如:
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);