在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
答案 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 );
请参阅用户提交的示例: