Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysqli使用不同列的多个结果集处理准备好的过程调用_Php_Mysql_Database_Mysqli - Fatal编程技术网

Php mysqli使用不同列的多个结果集处理准备好的过程调用

Php mysqli使用不同列的多个结果集处理准备好的过程调用,php,mysql,database,mysqli,Php,Mysql,Database,Mysqli,当结果集具有不同的列时,是否有方法从单个准备好的查询中处理多个结果集 我有这样一个程序: CREATE PROCEDURE usp_CountAndList (in_SomeValue int) BEGIN SELECT COUNT(*) AS ListCount FROM Table WHERE SomeValue = in_SomeValue; SELECT Name, Cost, Text FROM Table WHERE SomeValue = in_SomeVal

当结果集具有不同的列时,是否有方法从单个准备好的查询中处理多个结果集

我有这样一个程序:

CREATE PROCEDURE usp_CountAndList (in_SomeValue int)
BEGIN
  SELECT COUNT(*) AS ListCount FROM Table WHERE SomeValue = in_SomeValue;

  SELECT
    Name, Cost, Text
  FROM Table WHERE SomeValue = in_SomeValue
  ORDER BY
    Name
  LIMIT 25;
END
$some_value = $_POST["SomeValue"];

if($some_value != null) {
    $dbh = mysqli_connect(...connection stuff...) or die ('I cannot connect to the database.');

    $query = $dbh->prepare("CALL usp_CountAndList( ? );");
    $query->bind_param("i", $some_value);
    if($query->execute() == true) {
        $meta = $query->result_metadata();
        $fields = $meta->fetch_fields();
        var_dump($fields);

        $query->store_result();
        $query->bind_result($list_count);
        while($query->fetch()) {
            print_r("<TR>");
            print_r("<TD>" . $list_count ."</TD>");
            print_r("</TR>\n");
        }

        $query->free_result();
        $dbh->next_result();

        $meta = $query->result_metadata();
        $fields = $meta->fetch_fields();
        var_dump($fields);

        $query->store_result();
        $query->bind_result($name, $cost, $text);

        while($query->fetch()) {
            print_r("<TR>");
            print_r("<TD>" . $name . "</TD>");
            print_r("</TR>\n");
        }

        $query->free_result();
        $dbh->next_result();
    }
    else {
        print_r("Query failed: " . $query->error . "<BR>\n");
        exit(0);
    }

    $query->close();
    $dbh->close();
}
我的PHP代码如下所示:

CREATE PROCEDURE usp_CountAndList (in_SomeValue int)
BEGIN
  SELECT COUNT(*) AS ListCount FROM Table WHERE SomeValue = in_SomeValue;

  SELECT
    Name, Cost, Text
  FROM Table WHERE SomeValue = in_SomeValue
  ORDER BY
    Name
  LIMIT 25;
END
$some_value = $_POST["SomeValue"];

if($some_value != null) {
    $dbh = mysqli_connect(...connection stuff...) or die ('I cannot connect to the database.');

    $query = $dbh->prepare("CALL usp_CountAndList( ? );");
    $query->bind_param("i", $some_value);
    if($query->execute() == true) {
        $meta = $query->result_metadata();
        $fields = $meta->fetch_fields();
        var_dump($fields);

        $query->store_result();
        $query->bind_result($list_count);
        while($query->fetch()) {
            print_r("<TR>");
            print_r("<TD>" . $list_count ."</TD>");
            print_r("</TR>\n");
        }

        $query->free_result();
        $dbh->next_result();

        $meta = $query->result_metadata();
        $fields = $meta->fetch_fields();
        var_dump($fields);

        $query->store_result();
        $query->bind_result($name, $cost, $text);

        while($query->fetch()) {
            print_r("<TR>");
            print_r("<TD>" . $name . "</TD>");
            print_r("</TR>\n");
        }

        $query->free_result();
        $dbh->next_result();
    }
    else {
        print_r("Query failed: " . $query->error . "<BR>\n");
        exit(0);
    }

    $query->close();
    $dbh->close();
}
我遇到的问题是,看起来第二个结果集的元数据是相同的,尽管它返回的是一组完全不同的列,这意味着我的第二个bind_result调用导致以下错误:

PHP Warning:  mysqli_stmt::bind_result() [<a href='mysqli-stmt.bind-result'>mysqli-stmt.bind-result</a>]: Number of bind variables doesn't match number of fields in prepared statement

我已经有一段时间不明白自己做错了什么……这几乎像是一个mysqli bug。是否有人有一些示例代码来演示如何执行我正在尝试的操作?

基本上,有一些要求可以使此功能正常工作

这是一个编译时设置,因此如果您使用共享主机,您可能无法更改此设置。 基本上在您的示例中,使用$query->next\u result而不是$dbh->next\u result

mysqli\u stmt::下一个\u结果


我只找到其他人中的一个试图这样做。

嗨,我不确定,但您的问题的解决方案可能在这里。我认为您的问题在于调用存储过程时在语句中绑定参数的方式。。。