【问题标题】:MYSQL Stored procedure giving null valueMYSQL 存储过程给出空值
【发布时间】: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 AS a, @p3 AS na, @p4 AS r, @p5 AS nv;
  • 以上在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 中转储代码。如果您需要更新您的问题,请单击“编辑”并添加额外信息。

标签: php mysql


【解决方案1】:

关注这两行:

$sql_2 = 'SELECT @a,@na,@r,@nv';
$a=$rows['a'];

计划 A:更改为

$sql_2 = 'SELECT @a AS a, @na AS na, @r AS r, @nv AS nv';
$a=$rows['a'];

B 计划:更改为

$sql_2 = 'SELECT @a,@na,@r,@nv';
$a=$rows['@a'];

【讨论】:

    猜你喜欢
    • 2011-02-13
    • 1970-01-01
    • 2015-04-28
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多