如何通过inout程序提出并获得参数?

时间:2014-03-12 01:21:43

标签: php

在mysql中:

drop PROCEDURE if EXISTS sp_returns_string;
create PROCEDURE  sp_returns_string(inout s_val  varchar(10) CHARACTER set utf8 )
BEGIN
  set s_val=CONCAT(s_val,'-','XXX');
END

set @x='abc';
call sp_returns_string(@x);
select @x 'CT';

--->没关系

在php中:

$dbh=new PDO($dsn,'root','root',array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
$inx='RED';
$stmt = $dbh->prepare("CALL sp_returns_string(?)");
$stmt->bindParam(1, $inx, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 30);
$stmt->execute();

$stmt->closeCursor();
$r = $dbh->query("SELECT $inx AS return_value")->fetch(PDO::FETCH_ASSOC);
if ($r) {
     echo sprintf('Customer #%d is %s ', $customerNumber, $r['return_value']);
}

显示错误消息:

  

致命错误:在第16行的非对象上调用成员函数query();   第16行:“$ r = $ dbh->查询(”SELECT $ inx AS return_value“) - > fetch(PDO :: FETCH_ASSOC);”

如何通过inout param放入get param?

--------------------------------------------- V2 我把代码改为:

    $inx='RED';
   $stmt = $dbh->prepare("CALL sp_returns_string(?)");
   $stmt->bindParam(1, $inx, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 30);
   $stmt->execute();

    echo sprintf( 'Customer  is %s ', $inx );

打印为:客户为红色。

输出中没有“-XXX”。正确的:客户是RED-XXX

1 个答案:

答案 0 :(得分:1)

$stmt->execute();之后,请尝试以下更改:

$stmt->free_result();
$stmt->prepare( "SELECT $inx AS return_value" );
$stmt->execute();

$stmt->bind_result( $inx );
$stmt->fetch();
$stmt->free_result();

echo sprintf( 'Customer #%d is %s ', $customerNumber, $inx );

请参阅用户提交的示例: