2011-06-17 110 views
0

嗨我有一个简单的MYSQL存储过程,它有一个IN(int)和一个OUT(int)参数。 我正在从PHP脚本调用存储过程。通过php脚本检索mysql存储过程的输出参数的问题

存储过程的代码:

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脚本执行完美,当它运行指示vidually。 但我有另一个存储过程..当我在上面的php脚本之前调用,我geting那种警告消息。 所以,我使用的脚本是(前上述PHP脚本):

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

是什么,当我拨打第二个存储过程的问题?

任何人都可以帮助我!

由于提前, SuryaPavan

+0

这些错误是什么? – k102 2011-06-17 12:14:36

+0

警告:mysqli_fetch_assoc()期望参数1为mysqli_result,null给出.......... var_dump($ row)==> NULL – SuryaPavan 2011-06-17 12:53:21

回答

0

我最近一直与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对象中)。