【问题标题】:bindparam variable has zero value after procedure is executed using pdo php使用 pdo php 执行过程后,bindparam 变量的值为零
【发布时间】:2017-02-24 17:33:12
【问题描述】:

我使用bindParam来绑定存储过程的返回值,一旦语句执行完毕

但我得到了零,我已将存储过程的输出变量指定为 BIGINT

我正在绑定参数,如下所示

$sql = "{:retval = CALL sp_testProc()}";
$stmt->bindParam('retval', $proc_pass_val, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT, 4);

bindparam最后一个参数是数据类型的长度,我这里传4,但是返回0,不知道为什么

谁能帮我解决这个问题

提前致谢

【问题讨论】:

  • 数据类型的长度可能是多少?假设我从存储过程中得到返回值 900,并且我在存储过程中将返回值定义为 BIGINT,而不管它给我的任何值是零,
  • 这根本与长度无关。它是关于调用 inout 变量 的正确语法
  • 我会从存储过程中得到数字输出,我将数据类型指定为PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT,即使我得到零,也不知道为什么
  • 因为语法错误

标签: php sql-server stored-procedures pdo


【解决方案1】:

这是我为使它工作所做的工作,希望这对某人有所帮助。

注意:在 MSSQL 服务器中定义的过程

这里我想将电子邮件发送到一个字段中以便在一个数组中获取它,您可以省略这一行 select @myemail as student_email; 并且您可以将 @myemail 的值获取到 $myemail

我的程序:

Alter proc [dbo].[sp_test_success](
@Id int=1,
@myemail varchar(250)=null output
)
AS
BEGIN
    select @myemail=rtrim(email) from Student where StudentId=@Id;  
    select @myemail as student_email;-- i put this to get myemail into array 
END

代码:

$dbh = new PDO('sqlsrv:Server=Server;Database=database', 'UID', 'Pwd');
$stmt = $dbh->prepare("{CALL sp_test_success(@Id=:Id,@myemail=:myemail)}");

$Id = 4;
$stmt->bindParam('Id', $Id, PDO::PARAM_INT); 
$stmt->bindParam('myemail', $myemail, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 500); 
$stmt->execute();
$results = array();
do {
    $rows= $stmt->fetch();// default fetch type PDO::FETCH_BOTH
    $results[]= $rows;
} while ($stmt->nextRowset());

echo "<pre>"; print_r($results);

print "procedure returned $myemail\n"; exit;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 2011-04-09
    • 2013-08-30
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多