通过php脚本检索mysql存储过程的out参数时出现问题


Problem in retrieving the out parameter of a mysql stored procedure through php script

嗨,我有一个简单的MYSQL存储过程,它有一个IN(int(和OUT(int(参数。我从PHP脚本中调用存储过程。

存储过程代码:

  DELIMITER $$
  USE `testing`$$
  DROP PROCEDURE IF EXISTS `test_sp_inout_params`$$
  CREATE DEFINER=`root`@`localhost` PROCEDURE `test_sp_inout_params`(IN username VARCHAR(30), OUT user_id INT)
  BEGIN
   INSERT INTO users (`name`) VALUES (username);
   SET user_id = LAST_INSERT_ID();
  END$$
 DELIMITER ;

我能够从mysql查询窗口运行存储过程,使用:

 CALL test_sp_inout_params('TestName', @user_id);
 SELECT @user_id

但是从PHP脚本我得到错误..:(

    mysqli_query($conn, "CALL test_sp_inout_params('surya', @user_id)");
    $rs = mysqli_query($conn, "SELECT @user_id");
    $row = mysqli_fetch_assoc($rs);
    var_dump($row);

[已编辑]上面的PHP脚本在单独运行时执行得很好。但我还有另一个存储过程。。当我在上面的php脚本之前调用它时,我得到的是那种警告消息。因此,我使用的脚本是(在上面提到的php脚本之前(:

    $rs1 = mysqli_query($conn, "CALL test_sp_no_params()");
    $arr = array();
    while($row1 = mysqli_fetch_assoc($rs1))
        $arr[] = $row1;

调用第二个存储过程时出现了什么问题?

有人能帮帮我吗!

提前感谢,SuryaPavan

我最近也遇到了MySQLI的问题。我使用MySQLI::multi_query,但我认为这可能也是一个适合您的解决方案。调用查询后,请尝试使用此函数,并告诉我它是否会返回您所期望的结果。鉴于您只执行单个查询而不是多个查询,我相信您也可以减少此函数的一些开销。

public function getResultSets() {
    $retVal = array();
    do {
        if ($result = $this->mysqli->store_result())
            $retVal[] = $result;
    } while ($this->mysqli->next_result());
    return $retVal;
}

但是,我要说的是,存储过程调用不会返回任何内容。如果你想这样做,那么你必须设置参数并传递它们。例如,如果我有一个有2个输入和2个输出的存储过程,我会将其传递到MySQLI::multi_query中(其中的multi_query部分意味着你可以指定多个查询来传递,就像在mysql工作台中一样(。

$thisGuy = new MySQLI(inputParamsHere);
$retVal = $thisGuy->multi_query("CALL myDB.storedProc($var1, $var2, @return1, @return2); select @return1 as firstValue, @return2 as secondValue;");
if ($retVal) getResultSets();

getResultSets((将返回一个数组,该数组包含其中每个查询的结果(只要结果集中有内容,初始存储过程调用就不会返回任何内容,因此在函数中处理的mysqli对象中有一个空结果集(。