簡體   English   中英

PHP + MySQL +存儲過程,如何獲取單個“出”值的結果

[英]PHP +MySQL + Stored Procedure, how to obtain result of single “out” value

我知道我的問題和這個問題非常相似。 實際上,這實際上是一個后續問題。

$db = new mysqli($host, $user, $pass, $database);

if($db->connect_errno > 0){
    die('Unable to connect to database [' . $db->connect_error . ']');
}
$db->query("SET @email  = " . "'" . $db->real_escape_string($recipient) . "'");
$db->query("SET @FormID   = " . "'" . $db->real_escape_string($list) . "'");
$db->query("SET @FieldName  = " . "'" . $db->real_escape_string($fieldName) . "'");
$db->query("SET @SubID  = " . "'" . $db->real_escape_string($action) . "'");
$db->query("SET @result = 2"); 

$rs = $db->multi_query("CALL EmailListCheck(@email, @FormID, @FieldName,@SubID, @result);SElect @result as result1");
if( $rs ) {
  $results = 0;
  do {
    if ($result = $db->store_result()) {
      printf( "<b>Result #%u</b>:<br/>", ++$results );
      while( $row = $result->fetch_row() ) {
        foreach( $row as $cell ) echo $cell, "&nbsp;";
      }
      $result->close();
      if( $db->more_results() ) echo "<br/>";
    }
  } while( $db->next_result() );
}

當我運行上面的代碼時,我收到以下結果集:

Result #1:
2 45 test_654@test.net 
Result #2:
0 

結果#1返回存儲過程的中間部分。 我需要隱瞞SP內部的一條select語句。

我需要從結果2返回的值來繼續執行腳本並確定如何繼續。 如何將結果#2中的值轉換為可以使用的變量。

我也嘗試遵循此示例 當我嘗試運行此部分代碼時,它返回“獲取失敗:(2014)命令不同步; 您現在不能運行此命令”

if(!$db->query("CALL EmailListCheck(@email, @FormID, @FieldName,@SubID, @result)"))
die("CALL failed: (" . $db->errno . ") " . $db->error);

// Fetch OUT parameters 
if (!($res = $db->query("SELECT @result AS result")))
    die("Fetch failed: (" . $db->errno . ") " . $db->error);
$row = $res->fetch_assoc();

// Return result
if($row['result'] == TRUE) {
    Echo 'WORKS';
}
else {
    return false;
} 

歸根結底,我需要從存儲過程中返回單個OUT值,到目前為止還沒有成功。

根據@Barmar的注釋中的建議,我添加了以下代碼:$ db-> next_result();

完整代碼如下。 不確定這是最佳做法,但目前它是否有效。

    if(!$db->query("CALL EmailListCheck(@email, @FormID, @FieldName,@SubID, @result)"))
die("CALL failed: (" . $db->errno . ") " . $db->error);

$db->next_result();

// Fetch OUT parameters 
if (!($res = $db->query("SELECT @result AS result")))
    die("Fetch failed: (" . $db->errno . ") " . $db->error);
$row = $res->fetch_assoc();

// Return result
if($row['result'] == TRUE) {
    Echo 'WORKS';
}
else {
    return false;
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM