【发布时间】:2015-03-30 17:27:19
【问题描述】:
我有一个带有 2 IN 和 4 OUT 参数的 SP。它在 MYSQL 中运行良好,但在我使用 PHP 调用时却不行。
这是我的代码:
try{
//var_dump($mysqli);
// bind the first parameter to the session variable @uid
$stmt = $mysqli->prepare('SET @tid := ?');
$stmt->bind_param('i', $tid);
$stmt->execute();
// bind the second parameter to the session variable @userCount
$stmt = $mysqli->prepare('SET @mid := ?');
$stmt->bind_param('i', $memID);
$stmt->execute();
// execute the stored procedure
$sql_1 = 'CALL supplyRSummary(@tid,@mid,@a,@na,@r,@nv)';
$stmt = $mysqli->prepare($sql_1);
// execute the second query to get values from OUT parameter
$sql_2 = 'SELECT @a,@na,@r,@nv';
$result = $mysqli->query($sql_2);
$rows = $result->fetch_assoc();
if ($rows) {
$a=$rows['a'];
$na=$rows['na'];
$r=$rows['r'];
$nv=$rows['nv'];
var_dump($a);
}
}catch (PDOException $pe){
die("Error occurred:" . $pe->getMessage());
}
这里,var_dump($a) 给出了“null”的值。
关于我的代码有什么问题有什么建议吗?
【问题讨论】:
-
您不能像这样为
SELECT查询添加别名。您必须指定列。 -
SET @p0='1';设置@p1='9';呼叫
supplyRSummary(@p0,@p1,@p2,@p3,@p4,@p5);选择@p2 ASa, @p3 ASna, @p4 ASr, @p5 ASnv; -
以上在mysql中给出了正确的结果
-
BEGIN SELECT COUNT() INTO a FROM tbl1 WHERE t_id=tID AND mem_id=mId AND rt_q_a_s !=0; SELECT COUNT() INTO na FROM tbl1 WHERE t_id=tID AND mem_id=mId AND rt_q_na_s !=0; SELECT COUNT() INTO r FROM tbl1 WHERE t_id=tID AND mem_id=mId AND rt_q_r_s !=0;从 tbl1 中选择 COUNT() 到 nv,其中 t_id=tID AND mem_id=mId AND rt_q_a_s =0;结束
-
请不要在 cmets 中转储代码。如果您需要更新您的问题,请单击“编辑”并添加额外信息。