2015-04-02 92 views
0

我有一個存儲的程序,它返回一個特定於輸入參數的數據集。 當我試圖從Wordpress調用我的程序時,如下所示,我得到了如下錯誤:通過Wordpress中的存儲過程獲得帖子

WordPress數據庫錯誤:[Commands out of sync;你不能運行這個命令現在]

add_filter('posts_request', 'search_posts_request', 2, 10); 

function search_posts_request($posts, $wpquery) { 
    return "call my_sp(1, 0)"; 
} 

能否請您給我指教(除臨時表的解決方案,結果數據集存儲爲SP),如何解決這個問題,從SP返回的數據?

回答

0

我找到了一個解決方案:

  1. 中的wp-config.php中添加此行來啓用,而不是MySQL的lib中的mysqli

    :在functions.php的

    define('WP_USE_EXT_MYSQL', false); 
    
  2. 我更新了我的代碼緊隨其後。我加一個標誌以便調用mysqli_next_result()來清除響應緩衝器標記的存儲過程調用作爲SP返回而不是一個兩個結果(數據集和結果代碼):

    $sp_called = false; 
    
    add_filter('posts_request', 'search_posts_request', 2, 10); 
    add_filter('found_posts_query', 'search_found_posts_query', 2, 10); 
    
    
    function search_posts_request($posts, $wpquery) 
    { 
        // mark sql request as a sp call 
        $sp_called = true; 
        return "call my_sp(1, 0)"; 
    } 
    
    public function search_found_posts_query($query, $wpquery) 
    { 
        global $wpdb, $sp_called; 
    
        if ($sp_called) 
        { 
         // clear last response and reset sp call flag 
         mysqli_next_result($wpdb->dbh); 
         $sp_called = false; 
        } 
    
        return $query; 
    }