Php 提供空值的MYSQL存储过程

Php 提供空值的MYSQL存储过程,php,mysql,Php,Mysql,我有一个SP,有2个输入和4个输出参数。它在MYSQL中运行良好,但在我使用PHP调用时就不行了 这是我的密码: try{ //var_dump($mysqli); // bind the first parameter to the session variable @uid $stmt = $mysqli->prepare('SET @tid := ?'); $stmt->bind_p

我有一个SP,有2个输入和4个输出参数。它在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”值


关于我的代码出了什么问题,有什么建议吗?

关注以下两行:

$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'];
$sql_2 = 'SELECT @a,@na,@r,@nv';
$a=$rows['@a'];
方案B:改为

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

不能像这样为SELECT查询设置别名。您必须指定列。SET@p0='1';设置为p1='9';呼叫supplyRSummary@p0,@p1,@p2,@p3,@p4,@p5;选择@p2为a、@p3为na、@p4为r、@p5为nv;上面给出了mysqlBEGIN SELECT COUNT to a FROM tbl1的正确结果,其中t_id=tID,mem_id=mId,rt_q_a_s=0; 从tbl1中选择COUNT INTO na,其中t_id=tID,mem_id=mId,rt_q_na_s=0; 从tbl1中选择计数到r,其中t_id=tID,mem_id=mId,rt_q_r_s=0; 从tbl1中选择COUNT INTO nv,其中t_id=tID,mem_id=mId,rt_q_a_s=0;请不要在注释中转储代码。如果您需要更新您的问题,请单击“编辑”并添加额外信息。