Php 从msqli::multi_查询获取行时遇到问题

Php 从msqli::multi_查询获取行时遇到问题,php,sql,mysql,multi-query,user-variables,Php,Sql,Mysql,Multi Query,User Variables,我有一个包含许多语句的sql查询。它: 设置用户变量 调用存储过程 调用另一个存储过程 选择一些数据 我知道这个查询是正确的,因为我已经在MySQL Workbench中在同一个用户下对它进行了测试。问题是: set @current_post = 535; /* 535 for testing, this will be a variable */ call under_user_type(@currrent_post, @user_type, @user_id); call get_cat

我有一个包含许多语句的sql查询。它:

  • 设置用户变量
  • 调用存储过程
  • 调用另一个存储过程
  • 选择一些数据
  • 我知道这个查询是正确的,因为我已经在MySQL Workbench中在同一个用户下对它进行了测试。问题是:

    set @current_post = 535; /* 535 for testing, this will be a variable */
    
    call under_user_type(@currrent_post, @user_type, @user_id);
    call get_category(@current_post, @category);
    
    select p.post_title, p.post_name,
    (
        swell_wp.post_score(p.ID)
    ) as score,
    
    (
        swell_wp.is_under_user(p.ID, @user_type, @user_id)
    ) as under_user,
    
    (
        swell_wp.is_under_category(p.ID, @category)
    ) as under_category
    
        from wp_posts as p
        where p.post_type = 'post'
        and p.id != @current_post
        and p.post_status = 'publish'
        having (
            under_user = true
            or under_category = true
        )
        order by score desc;
    
    它只是存储在一个字符串中:
    $sql
    。然后,我用PHP对其执行此操作:

    $query = new MySQLi(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
    $query->multi_query($sql);
    
    do {
        $query->next_result();
    } while( ! $result = $query->use_result() );
    
    print_r($result);
    
    这将打印一个结果对象,但该对象为空。尝试迭代也不会产生任何结果


    我做错了什么?我甚至可以像这样使用用户变量吗?或者我需要将过程转换为存储函数并执行三个单独的查询吗?

    您显然没有从结果中获取行。请将代码更改为此,它将打印结果

    $query = new MySQLi(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
    $query->multi_query($sql);
    
    do {
           /* store first result set */
           if ($result = $query->use_result())
           {
               while ($row = $result->fetch_row())
               {
                   print_r($row);
               }
               $result->close();
           }
           /* print divider */
           if ($query->more_results())
           {
               printf("-----------------\n");
           }
       } while ($query->next_result());
    
    试试这个:

    $query = new MySQLi(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }
    if ($query->multi_query($sql)) {
        do {
            if ($result = $query->use_result()) {
                while ($row = $result->fetch_row()) {
                    printf("%s\n", $row[0]);
                }
                $result->free();
            }
        } while ($query->next_result());
    } else {
       echo 'ERROR FOR QUERY!';
    }
    
    这将帮助您捕获任何错误。此外,我认为您的使用结果需要与下一个使用结果交换


    更新:另一件事,您是否检查以确保传递给查询的变量实际包含数据?打印我们的查询,以确保您可以在数据库中运行查询并手动获取结果。

    我有所有这些,但我的结果是空的——尝试获取行目前没有任何作用,因为我无法获取任何结果。我从mysql workbench复制了查询。但是我确实让它工作了,有两个问题:第一个问题是我想我需要使用
    mysqli::store_result
    ,而不是使用result。第二点是,我认为打印
    $result
    可以显示其内容,而无需在其上循环。我错了,用文档代码让它工作了