通过Wordpress中的存储过程获取帖子

时间:2015-04-02 21:53:37

标签: mysql wordpress stored-procedures

我有一个存储过程,它返回一个特定于输入参数的数据集。 当我试图从Wordpress调用我的程序时,如下所示,我得到了像

这样的错误

WordPress数据库错误:[命令不同步;你现在不能运行这个命令]

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

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

你能不能给我建议(除了临时表解决方案作为sp的数据集存储),如何解决这个问题并从sp返回数据?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:

  1. 在wp-config.php中添加此行以启用mysqli而不是mysql lib:

    define( 'WP_USE_EXT_MYSQL', false);
    
  2. 在functions.php中的
  3. 我更新了我的代码,如下所示。我添加了一个标记来标记存储过程调用,以便调用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;
    }