2011-06-17 108 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對象中)。