我有一个存储过程,它返回一个特定于输入参数的数据集。 当我试图从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返回数据?
答案 0 :(得分:0)
我找到了解决方案:
在wp-config.php中添加此行以启用mysqli而不是mysql lib:
define( 'WP_USE_EXT_MYSQL', false);
我更新了我的代码,如下所示。我添加了一个标记来标记存储过程调用,以便调用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;
}