2012-08-28 51 views
1

我一直試圖讓這個PHP函數工作一段時間,但沒有成功。出於某種原因,每次運行時,我的mysql都會出現「命令不同步,現在無法運行此命令」的錯誤。我正在使用與我已經完成的每個其他php項目相同的技術,這就是調用mysqli-> next_result,以便我可以避免該錯誤。然而,當我在這裏稱它似乎沒有效果。mysqli錯誤與「命令不同步」無論多少次我稱之爲「next_result()」

if($questionType == 5){ 
    global $To; 
     $to="[email protected]"; 
     $subject = "txtoutage session completed"; 
     $message ="Session completed by: ".$number." \n on: ".date("Y-m-d H:i:s")." \n"; 
     if($sid = $mysqli->query("CALL GetSessionFromPhoneNumProc('$number')")){ 
      $sids = $sid->fetch_assoc(); 
      $sid->free(); 
      $sids = $sids['sid']; 
      $mysqli->close(); 
      $res->free(); 
      if($res = $mysqli->query("CALL GetAnswersFromSession('$sids')")){ 
       while($row = $res->fetch_assoc()){ 
       $mysqli->next_result(); 
       $qid = $row['Question_ID']; 
       $question = $mysqli->query("SELECT Question_Text FROM questions WHERE Question_ID = '$qid'"); 
       $question = $question->fetch_assoc(); 
       $question = $question['Question_Text']; 
       if($row['Answer_Text'] == null){ 
        $displayText = $row['Answer_Body']; 
       } 
       else{ 
        $displayText = $row['Answer_Text']; 
       } 
       $message = $message.$question.": ".$displayText." \n"; 
      } 
     } 
     else{ 
      $log->logError("mysql error sess: (" . $mysqli->errno . ") " . $mysqli->error); 
     } 
    } 
    else{ 
     $log->logError("mysql error answers: (" . $mysqli->errno . ") " . $mysqli->error); 
    } 
    $from = "[email protected]"; 
    $headers = "From:" . $from; 
    mail($to,$subject,$message,$headers); 
} 
+1

如果您不使用'multi_query',則不需要'next_result'。 [Documentation here](http://php.net/manual/en/mysqli.next-result.php) – Matt

+0

next_result一直在爲每一個其他查詢工作,只要它出現「命令不同步」的錯誤,是否有更好的方法避免這個錯誤? –

+1

正確使用它。爲什麼你甚至使用'next_result'?就像我說的那樣,它應該和'multi_query'一起使用。您一次只能使用query()執行一個查詢。你只需要'fetch_assoc()'。 – Matt

回答

0

從您的代碼mysqli_next_result調用(這條線:$mysqli->next_result();)。

正如PHP文檔中所解釋的,mysqli_next_result可以將之前調用的下一個結果集準備到mysqli_multi_query(),它可以通過mysqli_store_result()或mysqli_use_result()來檢索。

由於您未使用mysqli_multi_query(),您不需要,也不一定要求致電mysqli_next_result

在您的代碼中,使用mysqli_fetch_assoc檢索下一個結果,並且在每次調用mysqli_query後都已使用此函數。

相關問題